
    hh{                       S r SSKrSSKJr  SSKJr  SSKJr  SSKrSSK	J
r
Jr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJrJrJr  SSKJrJrJr  SSKJr  SSK J!r!  SSK"J#r#  SSK$J%r%J&r&J'r'J(r(J)r)  SSK*J+r,J-r.J/r0J1r2  SSK3J4r4J5r5  SSK6r6SSK7r7SSK8r8SSK9r9SSKJ:r:  SSK;J<r<J=r=J>r>J?r?J@r@  \<(       a  SSKAJBrB  \6R                  " \D5      rE " S S\:5      rF\" S/ SQ5      rG\G" \FR                  SSS5      \G" \FR                  SSS5      \G" \FR                  SSS5      \G" \FR                  SSS5      \G" \FR                  SSS5      \G" \FR                  SSS5      \G" \FR                  SSS5      \G" \FR                  SSS5      \G" \FR                  SSS5      S .	rQS! S" S# S$ S%.rRS& S' S( S) S%.rSS* rTS+ rU " S, S-5      rV " S. S/5      rW " S0 S1\X5      rY " S2 S3\X5      rZ " S4 S5\X5      r[ " S6 S7\[5      r\ " S8 S9\[5      r] " S: S;\X5      r^ " S< S=\[5      r_ " S> S?\[5      r` " S@ SA\%5      ra " SB SC\a5      rb " SD SE\a5      rc " SF SG\a5      rd " SH SI\&5      reSJrf " SK SL\)" SM5      5      rg " SN SO\%5      rh " SP SQ\%5      ri " SR SS\&5      rj " ST SU\&5      rk " SV SW\&5      rl " SX SY\&5      rm " SZ S[\&5      rn " S\ S]\%5      ro " S^ S_\%5      rp " S` Sa\%5      rq " Sb Sc\%5      rr " Sd Se\5      rs " Sf Sg\)" SM5      5      rt " Sh Si\)" SM5      5      ru " Sj Sk\5      rv " Sl Sm\5      rw " Sn So\5      rx " Sp Sq\)" SM5      5      rySrSsStSuSvSwSxSySzS{S|S}S~SSS.rzS r{S r|S r}S r~S rS r\|\}\~S.\\S.S.rS rS r\" 5         S rg)zfontTools.ttLib.tables.otTables -- A collection of classes representing the various
OpenType subtables.

Most are constructed upon import from data in otData.py, all are populated with
converter objects from otConverters.py.
    N)IntEnum)reduce)radians)defaultdict
namedtuple)OPTIMIZE_FONT_SPEED)TupleVariation)dfs_base_table)quantizeRect)otRound)	TransformIdentityDecomposedTransform)	bytesjoinpadsafeEval)Vector)ControlBoundsPen)TransformPen   )	BaseTableFormatSwitchingBaseTableValueRecordCountReference getFormatSwitchingBaseTableClass)fixedToFloatfloatToFixedfloatToFixedToStrstrToFixedToFloat)LookupDebugInfoLOOKUP_DEBUG_INFO_KEY)IntFlag)TYPE_CHECKINGIteratorListOptionalSet)_TTGlyphSetc                   T    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrg)VarComponentFlags4   r                   @         i                 @  l       N)__name__
__module____qualname____firstlineno__RESET_UNSPECIFIED_AXES	HAVE_AXESAXIS_VALUES_HAVE_VARIATIONTRANSFORM_HAS_VARIATIONHAVE_TRANSLATE_XHAVE_TRANSLATE_YHAVE_ROTATIONHAVE_CONDITIONHAVE_SCALE_XHAVE_SCALE_YHAVE_TCENTER_XHAVE_TCENTER_YGID_IS_24BITHAVE_SKEW_XHAVE_SKEW_YRESERVED_MASK__static_attributes__r9       Q/var/www/html/env/lib/python3.13/site-packages/fontTools/ttLib/tables/otTables.pyr*   r*   4   sW    #I!'$MNLLNNLKK)MrO   r*   VarTransformMappingValues)flagfractionalBitsscaledefaultValue      
   iL)	
translateX
translateYrotationscaleXscaleYskewXskewYtCenterXtCenterYc                 0    [         R                  " SU 5      $ )N>Bstructpackvs    rP   <lambda>ri   f       T1%rO   c                 0    [         R                  " SU 5      $ )N>Hrd   rg   s    rP   ri   ri   g   rj   rO   c                 6    [         R                  " SU 5      SS  $ )N>Lr   rd   rg   s    rP   ri   ri   h   s    T1%ab)rO   c                 0    [         R                  " SU 5      $ )Nrn   rd   rg   s    rP   ri   ri   i   rj   rO   )r   r,      r-   c                 6    [         R                  " SU 5      S   $ )Nrc   r   re   unpackrg   s    rP   ri   ri   l       tQ'*rO   c                 6    [         R                  " SU 5      S   $ )Nrl   r   rr   rg   s    rP   ri   ri   m   rt   rO   c                 <    [         R                  " SSU -   5      S   $ )Nrn       r   rr   rg   s    rP   ri   ri   n   s    tUQY/2rO   c                 6    [         R                  " SU 5      S   $ )Nrn   r   rr   rg   s    rP   ri   ri   o   rt   rO   c                 v   X   nUS:  a  X!S-   4$ US:  a  US-
  S-  XS-      -  US-   4$ US:  a   US-
  S-  XS-      S-  -  XS-      -  US-   4$ US	:  a,  US-
  S
-  XS-      S-  -  XS-      S-  -  U US-      -  US-   4$ US	-
  S-  XS-      S
-  -  XS-      S-  -  U US-      S-  -  XS-      -  US-   4$ )zdRead a variable-length number from data starting at index i.

Return the number and the next index.
r2   r      r.   r,      r/   rp         r-   r0      r9   )dataib0s      rP   _read_uint32varr   s   sD    
B	Dyq5y	dT	a$1u+-q1u44	dT	b 4A;!#33dq5kA1q5HH	dT	b 4A;"#44tE{a7GG$EK
 
q5 	 T	b 4A;"#44tE{b7HH4EL
L !e!e$ 	$rO   c                 `   U S:  a  [         R                  " SU 5      $ U S:  a  [         R                  " SU S-  5      $ U S:  a  [         R                  " SU S-  5      S	S
 $ U S:  a  [         R                  " SU S-  5      $ [         R                  " SS5      [         R                  " SU 5      -   $ )z2Write a variable-length number.

Return the data.
r2   rc   r8   rl      i    rn   i   r   Ni   l      @ r|   rd   rg   s    rP   _write_uint32varr      s    
 	4x{{4##	
V{{4!f*..	
X{{4!h,044	
Z{{4!j.22{{4&T1)===rO   c                   N    \ rS rSrS rSS jrS rS rS rS r	S	 r
S
 rS rSrg)VarComponent   c                 $    U R                  5         g N)populateDefaultsselfs    rP   __init__VarComponent.__init__   s    rO   Nc                     SU l         S U l        S U l        S U l        SU l        [
        U l        [
        U l        [        5       U l	        g )Nr   r9   )
flags	glyphNameconditionIndexaxisIndicesIndex
axisValuesNO_VARIATION_INDEXaxisValuesVarIndextransformVarIndexr   	transformr   
propagators     rP   r   VarComponent.populateDefaults   sA    
" $"4!3,.rO   c                 b  ^^^ Sm[        TT5      u  U l        mU R                  mT[        R                  -  (       a  SOSn[        U   " TTTU-    5      nTU-  mUR
                  U   U l        T[        R                  -  (       a  [        TT5      u  U l        mT[        R                  -  (       a  [        TT5      u  U l
        mOS U l
        U R                  c  SnO'US   R                  U R                     n[        U5      nT[        R                  -  (       a3  [        R                  " UTT5      u  nm[        S U 5       5      U l        OSU l        [        U R                   5      U:X  d   eT[        R"                  -  (       a  [        TT5      u  U l        mO[&        U l        T[        R(                  -  (       a  [        TT5      u  U l        mO[&        U l        [-        5       U l        UUU4S jn	[0        R3                  5        H#  u  pU	" U5      n[5        U R.                  X5        M%     T[        R6                  -  (       d%  U R.                  R8                  U R.                  l        T[        R<                  -  nU(       a  [        TT5      u  nmXS-
  -  nU(       a  M  TTS  $ )	Nr   rp   r,   AxisIndicesListc              3   :   #    U  H  n[        US 5      v   M     g7f   N)fi2fl.0rh   s     rP   	<genexpr>)VarComponent.decompile.<locals>.<genexpr>   s     #E*QE!RLL*   r9   c           	         > TU R                   -  (       aH  [        [        R                  " STTTS-    5      S   U R                  5      U R
                  -  nTS-  mU$ U R                  $ )N>hr,   r   )rR   r   re   rs   rS   rT   rU   )valuesrh   r   r   r   s     rP   read_transform_component8VarComponent.decompile.<locals>.read_transform_component   sk    v{{"dDQUO<Q?AVAV ll#  Q***rO   r   )r   r   r*   rJ   	_unpacker
glyphOrderr   rE   r   r?   r   Itemlenr	   decompileDeltas_tupler   r@   r   r   rA   r   r   r   VAR_TRANSFORM_MAPPINGitemssetattrrG   r\   r]   rM   )r   r   font
localStategidSizeglyphIDnumAxesaxisIndicesr   r   	attr_namemapping_valuesvaluen_r   r   s    `             @@rP   	decompileVarComponent.decompile   sG   'a0
A

0===!1G$T!a'k%:;	W1$333%4T1%="D$...'6tQ'?$D!1$(D!  (G$%67<<T=R=RSK+&G$...*;;GT1MMJ##E*#EEDO DO4??#w...$???)8q)A&D#Q&8D#$<<<(7a(@%D"A%7D",.	+ *?)D)D)F%I,^<EDNNI5 *G )666$(NN$9$9DNN!%333"4+DAqQJA a ABxrO   c                   ^ UR                   [           n/ nU R                  mUR                  U R                  5      nUS:  a2  T[
        R                  -  mUR                  [        S   " U5      5        O2T[
        R                  ) -  mUR                  [        S   " U5      5        U R                  b7  T[
        R                  -  mUR                  [        U R                  5      5        [        U R                  5      nU(       a  T[
        R                  -  mUR                  [        U R                  5      5        UR                  [         R"                  " U R                   Vs/ s H  n[%        US5      PM     snU(       + S95        OT[
        R                  ) -  mU R&                  [(        :w  a8  T[
        R*                  -  mUR                  [        U R&                  5      5        OT[
        R*                  ) -  mU R,                  [(        :w  a8  T[
        R.                  -  mUR                  [        U R,                  5      5        OT[
        R.                  ) -  mU4S jn[0        R3                  5        H2  u  p[5        U R6                  U5      n
UR                  U" X5      5        M4     [        T5      [9        U5      -   $ s  snf )N  rp   r,   r   )optimizeSizec                    > TUR                   -  (       a7  [        R                  " S[        XR                  -  UR
                  5      5      $ g)Nr   rO   )rR   re   rf   fl2firT   rS   )r   r   r   s     rP   write_transform_component7VarComponent.compile.<locals>.write_transform_component  s>    v{{"{{% 4f6K6KL  rO   )cfgr   r   
getGlyphIDr   r*   rJ   append_packerr   rE   r   r   r   r?   r   r	   compileDeltaValues_r   r   r   r@   r   rA   r   r   getattrr   r   )r   r   optimizeSpeedr   r   r   rh   r   r   r   r   r   s              @rP   compileVarComponent.compile   s<   !45

//$..1U?&333EKK
7+,'4444EKK
7+,*&555EKK()<)<=>doo&&000EKK()>)>?@KK22+/??;?aU1b\?;%2!2 '1111E""&88&AAAEKK()@)@AB'BBBBE!!%77&>>>EKK()?)?@A'????E	 *?)D)D)F%IDNNI6EKK1%HI *G  &488= <s   (K	c                   ^ TR                  SU5        TR                  5         SU4S jjnU" SU R                  5        U R                  b  U" SU R                  5        U R                  b  U" SU R                  5        U R                  c"  U R
                  [        R                  -  (       a_  U R
                  [        R                  -  (       a  SnOSnU" SU R                   Vs/ s H  n[        [        US	5      5      PM     snU5        U R                  [        :w  a  U" S
U R                  5        U R                  [        :w  a  U" SU R                  5        [        R                  5        HW  u  pgU R
                  UR                   -  (       d  M%  [#        U R$                  U5      nU" U[        XWR&                  5      5        MY     TR)                  S5        TR                  5         g s  snf )Nr   r9   c                 ^   > Ub)  TR                  U SU44U-   5        TR                  5         g g )Nr   )	simpletagnewline)namer   attrswriters      rP   write!VarComponent.toXML.<locals>.write-  s5       %(8':U'BC  !rO   r   r   r   ))resetUnspecifiedAxesr   r   r   r   r   )r9   )begintagr   r   r   r   r   r*   r>   r   floatfl2strr   r   r   r   r   rR   r   r   rS   endtag)r   r   ttFontr   r   rh   r   mappings    `      rP   toXMLVarComponent.toXML)  s   .	!
 	k4>>**"D$7$78  ,$d&;&;<!!-zz-DDDzz-DDD6,t O!va}!5 OQVW""&88&(?(?@!!%77%t'='=> #8"="="?IJJ-	2A)VA'='=>?	 #@ 	n%! !Ps   &G,
c                    U Vs/ s H  n[        U[        5      (       d  M  UPM     nnU R                  5         U GHG  u  pnU(       a   eUS   nUS:X  a  X`l        M#  US:X  a  [	        U5      U l        M;  US:X  a  [	        U5      U l        MS  US:X  ag  [        S [	        U5       5       5      U l        [	        UR                  SS5      5      (       a%  U =R                  [        R                  -  sl	        M  M  US	:X  a  [	        U5      U l        M  US
:X  a  [	        U5      U l        M  U[        ;   aI  [        U R                   U[	        U5      5        U =R                  [        U   R"                  -  sl	        GMC   U5       e   g s  snf )Nr   r   r   r   r   c              3   :   #    U  H  n[        US 5      v   M     g7fr   )str2flr   s     rP   r   'VarComponent.fromXML.<locals>.<genexpr>b  s     'K{!q"{r   r   0r   r   )
isinstancer   r   r   r   r   r   r   getr   r*   r>   r   r   r   r   r   rR   )r   r   r   contentr   crh   s          rP   fromXMLVarComponent.fromXMLR  sK   %>gAu)=1g>$+ D;gA{"!"))&.qk#++(0%%"''Kx{'K"KEII&<cBCCJJ"3"J"JJJ D--*21+',,)1!&..NNQK
 

3D9>>>

"d"u5 %,	 ?s
   F	F	c           	        ^ ^^ SmUUU 4S jn[         R                  5        H;  u  p4U" U5      n[        T R                  U[	        T R                  U5      U-   5        M=     T R
                  [        R                  -  (       d%  T R                  R                  T R                  l	        T[        T5      :X  d   T[        T5      45       eg )Nr   c                    > TR                   U R                  -  (       a-  [        TT   U R                  5      U R                  -  nTS-  mU$ g)Nr   r   )r   rR   r   rS   rT   )r   rh   deltasr   r   s     rP   read_transform_component_deltaIVarComponent.applyTransformDeltas.<locals>.read_transform_component_deltav  sC    zzFKK'&)V%:%:;fllJQrO   )r   r   r   r   r   r   r*   rG   r\   r]   r   )r   r   r   r   r   r   r   s   ``    @rP   applyTransformDeltas!VarComponent.applyTransformDeltass  s    	 *?)D)D)F%I2>BE	74>>9+MPU+U *G 

.;;;$(NN$9$9DNN!CK1!S[!11rO   c                 p    [        U 5      [        U5      :w  a  [        $ U R                  UR                  :H  $ r   )typeNotImplemented__dict__)r   others     rP   __eq__VarComponent.__eq__  s+    :e$!!}}..rO   c                 H    U R                  U5      nU[        L a  U$ U(       + $ r   )r   r   )r   r   results      rP   __ne__VarComponent.__ne__  s$    U#>1vA6zArO   )r   r   r   r   r   r   r   r   r   )r:   r;   r<   r=   r   r   r   r   r   r   r   r   r   rN   r9   rO   rP   r   r      s5     /DL89t'R#B2./
BrO   r   c                   6    \ rS rSrS	S jrS rS rS rS rSr	g)
VarCompositeGlyphi  Nc                 &    Ub  Xl         g / U l         g r   
components)r   r  s     rP   r   VarCompositeGlyph.__init__  s    (2(>*BrO   c                     / U l         U(       aA  [        5       nUR                  XU5      nU R                   R                  U5        U(       a  M@  g g r   )r  r   r   r   )r   r   r   r   	components        rP   r   VarCompositeGlyph.decompile  s>    $I&&t:>DOO""9- drO   c                     / nU R                    H#  nUR                  UR                  U5      5        M%     [        U5      $ r   )r  r   r   r   )r   r   r   r	  s       rP   r   VarCompositeGlyph.compile  s6    IKK	))$/0 )rO   c                     UR                  SU5        UR                  5         [        U R                  5       H  u  pVUR	                  XSU4/5        M     UR                  S5        UR                  5         g )Nr  index)r   r   	enumerater  r   r   )r   	xmlWriterr   r   r   r   r	  s          rP   r   VarCompositeGlyph.toXML  sc    .6%doo6LAOOIwl^< 7,-rO   c                     U Vs/ s H  n[        U[        5      (       d  M  UPM     nnU HE  u  pnUS:X  d   e[        5       nUR                  XX45        U R                  R                  U5        MG     g s  snf )Nr   )r   r   r   r   r  r   )r   r   r   r   r   r   r	  s          rP   r   VarCompositeGlyph.fromXML  sj    %>gAu)=1g>$+ D>)))$Id79OO""9-	 %, ?s
   A6A6r  r   )
r:   r;   r<   r=   r   r   r   r   r   rN   r9   rO   rP   r  r    s    G..rO   r  c                       \ rS rSrS rSrg)AATStateTablei  c                 .    0 U l         / U l        / U l        g r   )GlyphClassesStatesPerGlyphLookupsr   s    rP   r   AATStateTable.__init__  s    !rO   )r  r  r  Nr:   r;   r<   r=   r   rN   r9   rO   rP   r  r    s    "rO   r  c                       \ rS rSrS rSrg)AATStatei  c                     0 U l         g r   Transitionsr   s    rP   r   AATState.__init__  s
    rO   r  Nr  r9   rO   rP   r  r    s    rO   r  c                   4    \ rS rSrSr\S 5       rS rS rSr	g)	AATActioni  Nc                     g)NNNr9   )r   statess     rP   compileActionsAATAction.compileActions  s    rO   c                 X   U R                    Vs/ s H  o R                  U   (       d  M  UPM     nnU(       a/  UR                  SSR                  U5      S9  UR	                  5         U R
                  S:w  a.  UR                  SSU R
                  -  S9  UR	                  5         g g s  snf )NFlags,r   r   ReservedFlagsz0x%04X)_FLAGSr   r   joinr   r-  )r   r  fr   s       rP   _writeFlagsToXMLAATAction._writeFlagsToXML  s     KK<Kq==+;K<sxx?"x$BTBT7TU #	 =s
   B'B'c                 T    XR                   ;   d
   SU-  5       eSU R                  U'   g )Nzunsupported flag %sT)r.  r   r   rR   s     rP   _setFlagAATAction._setFlag  s+    {{"@$9D$@@""drO   r9   )
r:   r;   r<   r=   r.  staticmethodr'  r1  r5  rN   r9   rO   rP   r#  r#    s#    F  #rO   r#  c                       \ rS rSrSrSr/ SQr0 SS_SS_SS	_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_rS# rS$ r	S% r
S& rS' rS(rg))*RearrangementMorphActioni  r-   r   )	MarkFirstDontAdvanceMarkLastz	no changer   u	   Ax ⇒ xAr,   u	   xD ⇒ Dxrp   u   AxD ⇒ DxAu   ABx ⇒ xABr~   u   ABx ⇒ xBA   u   xCD ⇒ CDx   u   xCD ⇒ DCxr.   u   AxCD ⇒ CDxA	   u   AxCD ⇒ DCxArX   u   ABxD ⇒ DxAB   u   ABxD ⇒ DxBArV   u   ABxCD ⇒ CDxAB   u   ABxCD ⇒ CDxBAr   u   ABxCD ⇒ DCxAB   u   ABxCD ⇒ DCxBAc                 X    SU l         SU l        SU l        SU l        SU l        SU l        g Nr   F)NewStateVerbr:  r;  r<  r-  r   s    rP   r   !RearrangementMorphAction.__init__  s.    	 rO   c                 ~   Ub   eUR                  U R                  5        U R                  S:  a  U R                  S::  d   U R                  5       eU R                  U R                  -  nU R                  (       a  US-  nU R
                  (       a  US-  nU R                  (       a  US-  nUR                  U5        g )Nr   rB  r   r8   r7   )writeUShortrE  rF  r-  r:  r;  r<  r   r   r   actionIndexr   s        rP   r    RearrangementMorphAction.compile  s    """4==)yyA~$))r/<499<1		D...>>VOEVOE==VOE5!rO   c                     Ub   eUR                  5       U l        UR                  5       nUS-  U l        [        US-  5      U l        [        US-  5      U l        [        US-  5      U l        US-  U l        g )NrB  r   r8   r7   i  )
readUShortrE  rF  boolr:  r;  r<  r-  r   readerr   actionReaderr   s        rP   r   "RearrangementMorphAction.decompile  st    ###))+!!#CK	efn-/UV^,"V^rO   c                    UR                   " U40 UD6  UR                  5         UR                  SU R                  S9  UR                  5         U R	                  U5        UR                  SU R
                  S9  U R                  R                  U R
                  5      nUb  UR                  U5        UR                  5         UR                  U5        UR                  5         g )NrE  r,  rF  )
r   r   r   rE  r1  rF  _VERBSr   commentr   )r   r  r   r   r   verbComments         rP   r   RearrangementMorphAction.toXML  s    4)5)Jdmm<i(F$))4kkoodii0"k*rO   c                    S=U l         =U l        U l        S=U l        =U l        U l        U Vs/ s H  n[        U[        5      (       d  M  UPM     nnU H  u  pgnUS:X  a  [        US   5      U l         M!  US:X  a  [        US   5      U l        M<  US:X  a  [        US   5      U l        MW  US:X  d  M_  US   R                  S5       H"  n	U R                  U	R                  5       5        M$     M     g s  snf )	Nr   FrE  r   rF  r-  r*  r+  )rE  rF  r-  r:  r;  r<  r   r   r   splitr5  strip
r   r   r   r   r   teltNameeltAttrs
eltContentrR   s
             rP   r    RearrangementMorphAction.fromXML  s    9:::	D$6<AAA)DM%>gAu)=1g>-4)Gz*$ ('): ;F"$Xg%67	O+%-hw.?%@"G#$W-33C8DMM$**,/ 9 .5 ?s   C4C4)r;  r:  r<  rE  r-  rF  N)r:   r;   r<   r=   
staticSizeactionHeaderSizer.  rU  r   r   r   r   r   rN   r9   rO   rP   r9  r9    s    J5F	;	; 	
; 	
=	
 	
= 	
= 	
= 	
= 	
? 	
? 	O 	O 	 	 	  	!F&",0rO   r9  c                   B    \ rS rSrSrSrSS/rS rS rS r	S	 r
S
 rSrg)ContextualMorphActioni,  r.   r   SetMarkr;  c                 \    SU l         Su  U l        U l        SU l        Su  U l        U l        g )Nr   FFr   r   )rE  rf  r;  r-  	MarkIndexCurrentIndexr   s    rP   r   ContextualMorphAction.__init__1  s/    )5&d&,:))rO   c                 B   Ub   eUR                  U R                  5        U R                  nU R                  (       a  US-  nU R                  (       a  US-  nUR                  U5        UR                  U R
                  5        UR                  U R                  5        g )Nr   r8   )rI  rE  r-  rf  r;  rj  rk  rJ  s        rP   r   ContextualMorphAction.compile7  s    """4==)""<<VOEVOE5!4>>*4,,-rO   c                    Ub   eUR                  5       U l        UR                  5       n[        US-  5      U l        [        US-  5      U l        US-  U l        UR                  5       U l        UR                  5       U l        g )Nr   r8   i?  )rN  rE  rO  rf  r;  r-  rj  rk  rP  s        rP   r   ContextualMorphAction.decompileC  sz    ###))+!!#EFN+/"V^**,"--/rO   c                    UR                   " U40 UD6  UR                  5         UR                  SU R                  S9  UR                  5         U R	                  U5        UR                  SU R
                  S9  UR                  5         UR                  SU R                  S9  UR                  5         UR                  U5        UR                  5         g )NrE  r,  rj  rk  )r   r   r   rE  r1  rj  rk  r   r   r  r   r   r   s        rP   r   ContextualMorphAction.toXMLM  s    4)5)Jdmm<i(Kt~~>N$2C2CDrO   c                 *   S=U l         U l        S=U l        U l        Su  U l        U l        U Vs/ s H  n[        U[        5      (       d  M  UPM     nnU H  u  pgnUS:X  a  [        US   5      U l         M!  US:X  a<  US   R                  S5       H"  n	U R                  U	R                  5       5        M$     Mc  US:X  a  [        US   5      U l        M~  US	:X  a  [        US   5      U l        M  US
:X  d  M  [        US   5      U l        M     g s  snf )Nr   Fri  rE  r   r*  r+  r-  rj  rk  )rE  r-  rf  r;  rj  rk  r   r   r   rZ  r5  r[  r\  s
             rP   r   ContextualMorphAction.fromXMLZ  s    -..**//t',:))%>gAu)=1g>-4)Gz*$ ('): ;G#$W-33C8DMM$**,/ 9O+%-hw.?%@"K'!)(7*;!<N*$,Xg->$?! .5 ?s   DD)rk  r;  rj  rE  r-  rf  N)r:   r;   r<   r=   rb  rc  r.  r   r   r   r   r   rN   r9   rO   rP   re  re  ,  s1    J'F;
.0@rO   re  c                       \ rS rSrS rSrg)	LigActionim  c                      SU l         SU l        g )NFr   )StoreGlyphIndexDeltar   s    rP   r   LigAction.__init__n  s    
  !rO   )rz  ry  Nr  r9   rO   rP   rw  rw  m  s    !rO   rw  c                   ^    \ rS rSrSrSrSS/rS rS rS r	\
S	 5       rS
 rS rS rS rSrg)LigatureMorphActioni|  r=  rV   SetComponentr;  c                 L    SU l         Su  U l        U l        SU l        / U l        g )Nr   rh  )rE  r~  r;  r-  Actionsr   s    rP   r   LigatureMorphAction.__init__  s(    .:+4+rO   c                    Uc   eUR                  U R                  5        U R                  nU R                  (       a  US-  nU R                  (       a  US-  n[        U R                  5      S:  a  US-  nUR                  U5        [        U R                  5      S:  a$  U R                  5       nUR                  X5   5        g UR                  S5        g )Nr   r8   r   r7   )rI  rE  r-  r~  r;  r   r  compileLigActions)r   r   r   rK  r   actionss         rP   r   LigatureMorphAction.compile  s    &&&4==)""VOEVOEt||q VOE5!t||q ,,.G{34q!rO   c                 >   Uc   eUR                  5       U l        UR                  5       n[        US-  5      U l        [        US-  5      U l        [        US-  5      nUS-  U l        UR                  5       nU(       a  U R                  X65      U l        g / U l        g )Nr   r8   r7   i  )rN  rE  rO  r~  r;  r-  _decompileLigActionsr  )r   rQ  r   rR  r   performActionrK  s          rP   r   LigatureMorphAction.decompile  s    '''))+!!# 0/UV^, #V^'')44\ODLDLrO   c                    S[        5       0 pCnU HE  nUR                  R                  5        H$  u  pgUR                  UR	                  5       5        M&     MG     [        US S9 HQ  nX;  d  M
  [        S[        U5      S5       H)  n	XS  n
[        U5      U	-   S-  nUR                  X5        M+     X(-  nMS     [        US5      nX$4$ )NrO   c                     [        U 5      * U 4$ r   r   xs    rP   ri   4LigatureMorphAction.compileActions.<locals>.<lambda>  s    Q|rO   keyr   r-   )
setr   r   addr  sortedranger   
setdefaultr   )r   r&  r   r  rK  state_glyphClasstransar   suffixsuffixIndexs               rP   r'  "LigatureMorphAction.compileActions  s    '*CE2E&+&7&7&=&=&?"E3356 '@  %;<A#q#a&!,ArUF#&v;?q"8K**6? -  = VQ$$rO   c                 @   / n[        U R                  5       Hy  u  p#U[        U R                  5      S-
  :H  nUR                  S-  nXT(       a  SOS-  nXSR                  (       a  SOS-  nUR                  [        R                  " SU5      5        M{     [        U5      $ )Nr   ?        r      @rn   )	r  r  r   rz  ry  r   re   rf   r   )r   r   r   actionlastr   s         rP   r  %LigatureMorphAction.compileLigActions  s    "4<<0IADLL)A--D**Z7E4ZQ.E<<ZQ6EMM&++dE23 1   rO   c                 4   / nSnUR                  UR                  US-  -   5      nU(       dk  UR                  5       n[        US-  5      n[	        5       nUR                  U5        [        US-  5      Ul        US-  nUS:  a  SU-   nXl        U(       d  Mk  U$ )NFr-   r  r  r  i    i   )getSubReaderpos	readULongrO  rw  r   ry  rz  )	r   rR  rK  r  r  rQ  r   r  deltas	            rP   r  (LigatureMorphAction._decompileLigActions  s    **<+;+;kAo+MN$$&E
*+D[FNN6"
 23FLJ&E
"#e+%*" $ rO   c                    S=U l         U l        S=U l        U l        SU l        / U l        U Vs/ s H  n[        U[        5      (       d  M  UPM     nnU GH	  u  pgnUS:X  a  [        US   5      U l         M"  US:X  a<  US   R                  S5       H"  n	U R                  U	R                  5       5        M$     Md  US:X  a  [        US   5      U l        M  US:X  d  M  [        5       n
UR                  SS	5      R                  S5      nU Vs/ s H  oR                  5       PM     nnS
U;   U
l        [        US   5      U
l        U R                  R                  U
5        GM     g s  snf s  snf )Nr   FrE  r   r*  r+  r-  Action ry  rz  )rE  r-  r~  r;  r  r   r   r   rZ  r5  r[  rw  r   ry  rz  r   )r   r   r   r   r   r]  r^  r_  r`  rR   r  r   r0  s                rP   r   LigatureMorphAction.fromXML  s@   -..*/44D,%>gAu)=1g>-4)Gz*$ ('): ;G#$W-33C8DMM$**,/ 9O+%-hw.?%@"H$" Wb177<,12EqE2&%/)1(;L2M)N&##F+ .5 ? 3s   E%E%E*c                    UR                   " U40 UD6  UR                  5         UR                  SU R                  S9  UR                  5         U R	                  U5        U R
                   HV  nSUR                  4/nUR                  (       a  UR                  S5        UR                  SU5        UR                  5         MX     UR                  U5        UR                  5         g )NrE  r,  rz  )r*  ry  r  )
r   r   r   rE  r1  r  rz  ry  r   r   )r   r  r   r   r   r  attribss          rP   r   LigatureMorphAction.toXML  s    4)5)Jdmm<i(llF)6+A+ABCG||12'2 # 	rO   )r  r;  rE  r-  r~  N)r:   r;   r<   r=   rb  rc  r.  r   r   r   r7  r'  r  r  r   r   rN   r9   rO   rP   r}  r}  |  sP    J m,F""& % %4! ,,rO   r}  c                   X    \ rS rSrSrSr/ SQrS rS rS r	S r
S	 rS
 r\S 5       rSrg)InsertionMorphActioni	  r.   r-   )rf  r;  CurrentIsKashidaLikeMarkedIsKashidaLikeCurrentInsertBeforeMarkedInsertBeforec                 |    SU l         U R                   H  n[        XS5        M     SU l        / / sU l        U l        g rD  )rE  r.  r   r-  CurrentInsertionActionMarkedInsertionActionr4  s     rP   r   InsertionMorphAction.__init__  s;    KKDD&  BDb?#T%?rO   c                     Uc   eUR                  U R                  5        U R                  nU R                  (       a  US-  nU R                  (       a  US-  nU R
                  (       a  US-  nU R                  (       a  US-  nU R                  (       a  US-  nU R                  (       a  US-  nU[        U R                  5      S-  -  nU[        U R                  5      -  nUR                  U5        [        U R                  5      S:  a  U[        U R                  5         nOS	nUR                  U5        [        U R                  5      S:  a  U[        U R                  5         nOS	nUR                  U5        g )
Nr   r8   r7   r6   r5   r4   r~   r   r   )rI  rE  r-  rf  r;  r  r  r  r  r   r  r  r   )r   r   r   rK  r   currentIndexmarkedIndexs          rP   r   InsertionMorphAction.compile  sH   &&&4==)""<<VOEVOE$$VOE##VOE##VOE""VOET001Q66T//005!t**+a/&uT-H-H'IJL!L<(t))*Q.%eD,F,F&GHK K;'rO   c                    Uc   eUR                  5       U l        UR                  5       n[        US-  5      U l        [        US-  5      U l        [        US-  5      U l        [        US-  5      U l        [        US-  5      U l        [        US-  5      U l        U R                  X2UR                  5       US-  S-	  S	9U l
        U R                  X2UR                  5       US
-  S	9U l        g )Nr   r8   r7   r6   r5   r4   i  r~   )r  count   )rN  rE  rO  rf  r;  r  r  r  r  _decompileInsertionActionr  r  rP  s        rP   r   InsertionMorphAction.decompile:  s    '''))+!!#EFN+/$($8!#'#7 #'#7 "&uv~"6&*&D&Df&7&7&956>VWBW 'E '
# &*%C%Cf&7&7&9%&. &D &
"rO   c                     US:X  d  US:X  a  / $ UR                  UR                  US-  -   5      nUR                  UR                  U5      5      $ )Nr   r   r,   )r  r  getGlyphNameManyreadUShortArray)r   rR  r   r  r  rQ  s         rP   r  .InsertionMorphAction._decompileInsertionActionK  sO    F?eqjI**<+;+;eai+GH$$V%;%;E%BCCrO   c                    UR                   " U40 UD6  UR                  5         UR                  SU R                  S9  UR                  5         U R	                  U5        U R
                   H#  nUR                  SUS9  UR                  5         M%     U R                   H#  nUR                  SUS9  UR                  5         M%     UR                  U5        UR                  5         g )NrE  r,  r  glyphr  )r   r   r   rE  r1  r  r  r   )r   r  r   r   r   gs         rP   r   InsertionMorphAction.toXMLQ  s    4)5)Jdmm<i(,,A 8B - ++A 7qA , 	rO   c                    U R                  5         U Vs/ s H  n[        U[        5      (       d  M  UPM     nnU H  u  pgnUS:X  a  [        US   5      U l        M!  US:X  a<  US   R                  S5       H"  n	U R                  U	R                  5       5        M$     Mc  US:X  a   U R                  R                  US   5        M  US:X  a   U R                  R                  US   5        M   U5       e   g s  snf )NrE  r   r*  r+  r  r  r  )r   r   r   r   rE  rZ  r5  r[  r  r   r  r\  s
             rP   r   InsertionMorphAction.fromXML`  s    %>gAu)=1g>-4)Gz*$ ('): ;G#$W-33C8DMM$**,/ 944++228G3DE33**11(72CD%g%u .5 ?s
   C5C5c                    [        5       0 SpCnU H  nUR                  R                  5        Hi  u  pgUR                  b$  UR	                  [        UR                  5      5        UR                  c  ME  UR	                  [        UR                  5      5        Mk     M     [        US S9 H  nX;   a  M
  [        S[        U5      5       HH  n	[        U5      S-  U	-   n
[        U	[        U5      5       H  nXUS-    nUR                  X5        M     MJ     U H.  nU R                  U5      nU[        R                  " SU5      -  nM0     M     XC4$ )NrO   c                     [        U 5      * U 4$ r   r  r  s    rP   ri   5InsertionMorphAction.compileActions.<locals>.<lambda>|  s    c!fWaLrO   r  r   r,   r   rl   )r  r   r   r  r  r   r  r  r  r   r  r   re   rf   )r   r&  r  rK  r   r  r  r  r  start
startIndexlimitglyphsr  r   s                  rP   r'  #InsertionMorphAction.compileActionsp  s/   '*ub#fE&+&7&7&=&=&?"//;KKe&B&B CD..:KKe&A&A BC	 '@  W*@AF $q#f+.!&kQ.%7
"5#f+6E#EAI6F**6> 7 /
  //%0&++dG44   B" ""rO   )
r  r  r  r;  r  r  r  rE  r-  rf  N)r:   r;   r<   r=   rb  rc  r.  r   r   r   r  r   r   r7  r'  rN   r9   rO   rP   r  r  	  sH    JFI(<
"D&  # #rO   r  c                   $    \ rS rSrS rSS jrSrg)FeatureParamsi  c                     [         R                  US   5      U R                  :X  d&   SUS   < SU R                  R                  < 35       e[        R
                  " XU5        g )N
FeatureTagz&Wrong FeatureParams type for feature 'z': )featureParamTypesr   	__class__r:   r   r   )r   r   r   s      rP   r   FeatureParams.compile  sY    !!&"674>>I	
 < NN##
	
I
 	$-rO   Nc                 X    [         R                  " XX#U R                  R                  S9  g )N)r   )r   r   r  r:   rr  s        rP   r   FeatureParams.toXML  s    4>>;R;RSrO   r9   r%  )r:   r;   r<   r=   r   r   rN   r9   rO   rP   r  r    s    .TrO   r  c                       \ rS rSrSrg)FeatureParamsSizei  r9   Nr:   r;   r<   r=   rN   r9   rO   rP   r  r        rO   r  c                       \ rS rSrSrg)FeatureParamsStylisticSeti  r9   Nr  r9   rO   rP   r  r    r  rO   r  c                       \ rS rSrSrg)FeatureParamsCharacterVariantsi  r9   Nr  r9   rO   rP   r  r    r  rO   r  c                   6    \ rS rSrS	S jrS rS rS rS rSr	g)
Coveragei  Nc                 6    [        U S5      (       d  / U l        g g )Nr  )hasattrr  r   s     rP   r   Coverage.populateDefaults  s    tX&&DK 'rO   c           	         U R                   S:X  a  US   U l        U ? g U R                   S:X  a  / =o0l        US   n[        US S9nXE:w  a  [        R	                  S5        UnAU Hi  nUR
                  nUR                  nUR                  U5      n	UR                  U5      S-   n
UR                  UR                  [        X5      5      5        Mk     U ? g / U l        [        R	                  SU R                   5        U ? g )	Nr   
GlyphArrayr,   RangeRecordc                     U R                   $ r   )StartCoverageIndexr  s    rP   ri   #Coverage.postRead.<locals>.<lambda>  s
    9M9MrO   r  .GSUB/GPOS Coverage is not sorted by glyph ids.zUnknown Coverage format: %s)Formatr  r  logwarningStartEndr   extendr  r  )r   rawTabler   r  rangessorted_rangesrr  endstartIDendIDs              rP   postReadCoverage.postRead  s    ;;!"<0DK* K) [[A#%%F[m,F #6/MNM&LM&ee//%0,q0d33E'4IJK  K DKKK5t{{CKrO   c                    [        U SS 5      nUc  / =o l        SnSU0nU(       GaJ  UR                  U5      n[        U5      U:g  nUS   nU//nUSS   H3  n	XS-   :w  a&  US   R	                  U5        UR	                  U	/5        U	nM5     US   R	                  U5        U(       d  [        U5      S-  [        U5      :  a  Sn
[        [        U5      5       HY  nX   u  p[        5       nXl        UR                  U5      Ul
        UR                  U5      Ul        Xl        XU'   X-   U-
  S-   n
M[     U(       a%  [        R                  S5        UR                  S S	9  U H  nU?M     S
nSU0nX0l        U$ )Nr  r   r  r   rp   r  c                     U R                   $ r   )StartIDr  s    rP   ri   #Coverage.preWrite.<locals>.<lambda>  s    aiirO   r  r,   r  )r   r  getGlyphIDManyr  r   r   r  r  r  getGlyphNamer  r  r  r  r  sortr  )r   r   r  formatr  glyphIDsbrokenOrderr  r  r   r  r   r  r   r  s                  rP   preWriteCoverage.preWrite  s   x.>#%%F[ &)**62H *h6KA;DfXF#AB<Qh&2J%%d+MM7),	 (
 2Jd#c&kAoF;s6{+A!'JE#A %I"//6AG --c2AE+0( !1I!K%/!3E , KK PQKK$7K8A	  )62 rO   c                 l    [        U S/ 5       H#  nUR                  SUS9  UR                  5         M%     g )Nr  Glyphr,  )r   r   r   )r   r  r   r   s       rP   toXML2Coverage.toXML2  s4     x4Iy9 5rO   c                 \    [        U SS 5      nUc  / nXPl        UR                  US   5        g )Nr  r   )r   r  r   )r   r   r   r   r   r  s         rP   r   Coverage.fromXML  s/    x.>F KeGn%rO   )r  r  r   
r:   r;   r<   r=   r   r  r  r  r   rN   r9   rO   rP   r  r    s    2*X 
&rO   r  l    c                   L    \ rS rSrSS jrS r\S 5       rS rS r	S r
S	 rS
rg)DeltaSetIndexMapi  Nc                 6    [        U S5      (       d  / U l        g g Nr   r  r   r   s     rP   r   !DeltaSetIndexMap.populateDefaults	      tY''DL (rO   c                 4    US   S-  S:X  d   eUS   U l         g )NEntryFormat  r   r   r   )r   r  r   s      rP   r  DeltaSetIndexMap.postRead  s&    '&0Q666	*rO   c                    SnU  H  nX-  nM	     US-  nSnU(       a  US-  nUS-  nU(       a  M  [        US5      nUS::  d   eUSU-
  -	  USU-  S-
  -  -  nUS::  a  SnOUS::  a  SnOUS::  a  SnOS	nUS-
  S	-  US-
  -  $ )
Nr   r   r   r/      r,   i rp   r-   )max)r   oredidxinner	innerBits	entrySizes         rP   getEntryFormatDeltaSetIndexMap.getEntryFormat  s    CKD  v	NIaKE e 	1%	Bi(Ta9n5I-JK:IZIZIIQ1$Q77rO   c                     [        U SS 5      nUc  / =o l        [        U5      S:  a  SOSU l        U R                  R                  5       n[        U5      US'   U R                  U5      US'   U$ )Nr   r   r   r   MappingCountr!  )r   r   r   r  r   copyr-  )r   r   r   r  s       rP   r  DeltaSetIndexMap.preWrite+  sm    $	40?%''Glw<&0aa==%%'#&w< "&"5"5g">rO   c                     UR                  S5        UR                  5         [        [        U S/ 5      5       HS  u  p4SU4/nU[        :w  a  UR                  SUS-	  4SUS-  4/5        UR                  SU5        UR                  5         MU     g )	Nz7Omitted values default to 0xFFFF/0xFFFF (no variations)r   r  outerr/   r*  r   Map)rV  r   r  r   r   r  r   )r   r  r   r   r   r   s         rP   r  DeltaSetIndexMap.toXML25  s     	ST!'$	2">?HAq\NE** %2+. %&.1 u- @rO   c                     [        U SS 5      nUc	  / =U l        n[        US   5      n[        UR                  SS5      5      n[        UR                  SS5      5      nUS::  d   eUR	                  XgS-  U-  5        g )Nr   r  r4  0xFFFFr*  r   r/   )r   r   r   r   insert)	r   r   r   r   r   r   r  r4  r*  s	            rP   r   DeltaSetIndexMap.fromXMLF  sz    $	40?%''DL7w(7H567H56u{e34rO   c                 ^    U[        U R                  5      :  a  U R                  U   $ [        $ r   )r   r   r   )r   r   s     rP   __getitem__DeltaSetIndexMap.__getitem__P  s&    "#c$,,&7"7t||AO=OOrO   r  r   r   )r:   r;   r<   r=   r   r  r7  r-  r  r  r   r<  rN   r9   rO   rP   r  r    s5    + 8 82 "5PrO   r  uint8c                   <    \ rS rSrS
S jrS rS rS rS rS r	S	r
g)	VarIdxMapiT  Nc                 6    [        U S5      (       d  0 U l        g g r  r  r   s     rP   r   VarIdxMap.populateDefaultsU  r  rO   c                     US   S-  S:X  d   eUR                  5       nUS   nUR                  US   /[        U5      [        U5      -
  -  5        [        [	        X45      5      U l        g )Nr!  r"  r   r   r  )getGlyphOrderr  r   dictzipr   )r   r  r   r   mapLists        rP   r  VarIdxMap.postReadY  sg    '&0Q666'')
9%}J#g,(FGHC
45rO   c                 R   [        U SS 5      nUc  0 =o l        UR                  5       nU Vs/ s H  oBU   PM	     nn[        U5      S:  a,  US   US   :X  a   US	 [        U5      S:  a  US   US   :X  a  M   SU0n[        U5      US'   [        R                  U5      US'   U$ s  snf )Nr   r   r  r0  r!  )r   r   rE  r   r  r-  )r   r   r   r   r  r  s         rP   r  VarIdxMap.preWrite`  s    $	40?%''Gl'')
'12z!1:z2'lQ72;'"+#= 'lQ72;'"+#= w'#&w< "2"A"A'"J 3s   B$c                     [        [        U S0 5      R                  5       5       H8  u  p4SU4SUS-	  4SUS-  44nUR                  SU5        UR	                  5         M:     g )Nr   r  r4  r/   r*  r   r5  )r  r   r   r   r   )r   r  r   r  r   r   s         rP   r  VarIdxMap.toXML2o  sk    "74B#?#E#E#GHLE% %2+&%&.)E
 u- IrO   c                     [        U SS 5      nUc  0 nXPl         US   n[        US   5      n[        US   5      nUS::  d   eUS-  U-  XV'   g !   UR                  5       US      n NI= f)Nr   r  r  r4  r*  r   r/   )r   r   rE  r   )	r   r   r   r   r   r   r  r4  r*  s	            rP   r   VarIdxMap.fromXMLy  s    $	40?G"L	9'NE w(w(2+.	9&&(w8Es   A A(c                 B    U R                   R                  U[        5      $ r   )r   r   r   )r   r   s     rP   r<  VarIdxMap.__getitem__  s    ||	+=>>rO   r#  r   )r:   r;   r<   r=   r   r  r  r  r   r<  rN   r9   rO   rP   rA  rA  T  s     6 /?rO   rA  c                       \ rS rSrS rSrg)VarRegionListi  c                     UR                  S5      nU(       a  [        UR                  5      U l        0 U R                  ES[        U R                  S5      0E$ )NfvarRegionAxisCount)r   r   axesrW  r   r   )r   r   	fvarTables      rP   r  VarRegionList.preWrite  sR     HHV$	#&y~~#6D 
mm
~dmm=NO
 	
rO   )rW  Nr:   r;   r<   r=   r  rN   r9   rO   rP   rT  rT    s    
rO   rT  c                   6    \ rS rSrS	S jrS rS rS rS rSr	g)
SingleSubsti  Nc                 6    [        U S5      (       d  0 U l        g g r  r  r   s     rP   r   SingleSubst.populateDefaults  r  rO   c                    0 n[        US   5      nU R                  S:X  aW  US   nUR                  U5      nU Vs/ s H
  owU-   S-  PM     nnUR                  U5      n	[	        XI5       H	  u  pXU
'   M     O[U R                  S:X  a7  [        U5      US   :X  d   S5       eUS   n[	        XL5       H	  u  pXU
'   M     O S	U R                  -  5       eX0l        U ?g s  snf )
Nr  r   DeltaGlyphID   r,   
GlyphCountz invalid SingleSubstFormat2 table
Substituteunknown format: %s)_getGlyphsFromCoverageTabler  r
  r  rG  r   r   )r   r  r   r   inputr  	inputGIDSr   outGIDSoutNamesinpoutsubstsubs                 rP   r  SingleSubst.postRead  s    +HZ,@A;;!^,E++E2I@IJ	W%50	GJ,,W5H0" 1[[AE
h|442124\*E-" . 9*T[[881K Ks   Cc                 .   [        U SS 5      nUc  0 =o l        [        UR                  5       5      nUR                  nU VVs/ s H  u  pVU" U5      U" U5      4PM     nnn[        [        Xs5      5      nSn	S n
U H  u  pU
c  X-
  S-  n
X-   S-  U:w  d  M    O
   U
c  Sn	OSn	0 nXl        [        5       nU Vs/ s H
  oS   S   PM     nnU Vs/ s H
  oS   S   PM     nnUUl	        XS'   U	S:X  a  U
c   eXS'   U$ UUS'   U$ s  snnf s  snf s  snf )	Nr   r,   rb  r   r   r  ra  rd  )
r   r   listr   r   r  rG  r  r  r  )r   r   r   r   r   r  bgidItemssortableItemsr  r  inIDoutIDr  covitemrg  rm  s                     rP   r  SingleSubst.preWrite  sK   $	40?%''GlW]]_%__
?DEutqZ]JqM2uEs834 #KD}.%. $ }j(56a6(56a6
"Q;$$$',^$  &+H\"? F, 76s   D:DDc                     [        U R                  R                  5       5      nU H-  u  pEUR                  SSU4SU4/5        UR	                  5         M/     g )NSubstitutioninrl  )r  r   r   r   r   )r   r  r   r   inGlyphoutGlyphs         rP   r  SingleSubst.toXML2  sP    t||))+,!&G$5(BS0TU "'rO   c                 H    [        U SS 5      nUc  0 nXPl        US   XRS   '   g )Nr   rl  r|  )r   r   )r   r   r   r   r   r   s         rP   r   SingleSubst.fromXML  s/    $	40?G"L$U|drO   r>  r   r  r9   rO   rP   r]  r]    s    ,%N ,rO   r]  c                   F    \ rS rSrS
S jrS rS rS rS r\	S 5       r
S	rg)MultipleSubsti  Nc                 6    [        U S5      (       d  0 U l        g g r  r  r   s     rP   r   MultipleSubst.populateDefaults  r  rO   c                     0 nU R                   S:X  aA  [        US   5      nUS    Vs/ s H  oUR                  PM     nn[        [	        XF5      5      nO SU R                   -  5       eX0l        U ? g s  snf )Nr   r  Sequencere  )r  rf  rd  rF  rG  r   )r   r  r   r   r  srm  s          rP   r  MultipleSubst.postRead  sr    ;;!0*1EFF+3J+?@+?a\\+?E@3v-.G8*T[[881K As   A1c                 "   [        U SS 5      nUc  0 =o l        [        5       n[        [	        UR                  5       5      UR                  S9Ul        SU l        UUR                   Vs/ s H  o@R                  X$   5      PM     snS.nU$ s  snf )Nr   r  r   )r  r  )
r   r   r  r  rq  keysr   r  r  makeSequence_)r   r   r   rw  r  r  s         rP   r  MultipleSubst.preWrite  s    $	40?%''GljD0dooF
ILT++GN;T
  Us   )Bc                     [        U R                  R                  5       5      nU H>  u  pESR                  U5      nUR	                  SSU4SU4/5        UR                  5         M@     g )Nr+  r{  r|  rl  )r  r   r   r/  r   r   )r   r  r   r   r}  	outGlyphsrl  s          rP   r  MultipleSubst.toXML2
  s]    t||))+,"'G((9%C$5#,0OP #(rO   c                 |   [        U SS 5      nUc  0 nXPl        US:X  aS  / U l        U HE  n[        U[        5      (       d  M  Uu  pxn	US:X  d  M'  U R                  R                  US   5        MG     g US:X  a{  [        UR                  S[        U5      5      5      n
U R                  U
   n/ =oU'   U H;  n[        U[        5      (       d  M  Uu  pxn	US:X  d  M'  UR                  US   5        M=     g US   (       a  US   R                  S	5      O/ nU Vs/ s H  oR                  5       PM     snXRS
   '   g s  snf )Nr   r  r  r   r  r  rd  rl  r+  r|  )r   r   old_coverage_r   r   r   intr   r   rZ  r[  )r   r   r   r   r   r   elementelement_nameelement_attrsr   r  r  glyph_mappingr  r  s                  rP   r   MultipleSubst.fromXML  s<   $	40?G"L :!#D"!'51118.Q7*&&--mG.DE # :		'3w<89E&&u-E-//MEN"!'51118.Q</!((w)?@ #  05U|E%L&&s+	3<=9a	9=d=s   D9c                 &    [        5       nXl        U$ r   )r  rd  )r  seqs     rP   r  MultipleSubst.makeSequence_1  s    j
rO   )r  r   r  r   )r:   r;   r<   r=   r   r  r  r  r   r7  r  rN   r9   rO   rP   r  r    s0    	 >@  rO   r  c                   <    \ rS rSrS
S jrS rS rS rS rS r	S	r
g)ClassDefi8  Nc                 6    [        U S5      (       d  0 U l        g g )N	classDefs)r  r  r   s     rP   r   ClassDef.populateDefaults9      t[))DN *rO   c                 r   0 nU R                   S:X  ae  US   nUS   nUR                  U5      nU[        U5      -   nUR                  [	        Xg5      5      n[        X5       H  u  pU
(       d  M  XU	'   M     OU R                   S:X  a  US   nU H|  nUR                  n
U
(       d  M  UR                  nUR                  nUR                  U5      nUR                  U5      S-   nUR                  [	        Xg5      5      nU H  n	XU	'   M	     M~     O [        R                  SU R                   5        X0l        U ? g )Nr   
StartGlyphClassValueArrayr,   ClassRangeRecordzUnknown ClassDef format: %s)r  r   r   r  r  rG  Classr  r  r  r  r  )r   r  r   r  r  	classListr  r  
glyphNamesr   clsrecordsrecr   s                 rP   r  ClassDef.postRead=  s"   	;;!\*E !23Iooe,Gc)n,E..uW/DEJ"%j"<	3+.i( #= [[A12Gii		gg//%0,q0!2253HI
!+I+.i( ",  KK5t{{C"KrO   c                    [        U SS 5      nUc  0 U l        g UR                  n/ nUR                  5        H'  u  pVU(       d  M  UR	                  U" U5      XV45        M)     U(       a~  UR                  5         US   u  pxn	XU//n
USS   HA  u  pnXS-   :w  d  Xi:w  a(  U
S   R                  Xx/5        U
R	                  XkU/5        UnUnUn	MC     U
S   R                  Xx/5        U
$ g )Nr  r   r   r  )r   r  r   r   r   r  r  )r   r   r  r   r   r   r  r  lastNamelastClsr  r   s               rP   _getClassRangesClassDef._getClassRanges\  s    D+t4	DN__
'oo/NILL*Y/@A 0 JJL&+Ah#DGh/0F+09'CQh&#.2J%%t&67MM3";<$ ,5 2Jt./M rO   c                    SnS/ 0nU R                  U5      nU(       a  US   S   nUS   S   nXe-
  S-   n[        U5      S-  US-   :  aJ  [        [        U5      5       H+  nXH   u  ppn[        5       nXl        Xl        Xl        XU'   M-     SnSU0nOAUS   S   nS/U-  nU H&  u  ppn[        X-
  X-
  S-   5       H  nU	UU'   M
     M(     SnUUS.nX l        U$ )Nr,   r  r   r   r  rp   )r  r  )r  r   r  r  r  r  r  r  )r   r   r  r  r  
startGlyphendGlyph
glyphCountr   r  r  	startNamer   endNamer  startGlyphNameclassesr  s                     rP   r  ClassDef.preWriteu  s   &+%%d+1Jbz!}H!.2J6{Qa/s6{+A:@)7C	*,C )I%G #I #1I , .7 "(1#
*;A7C	"5#5s7G!7KL%(
 M <B *8WUrO   c                     [        U R                  R                  5       5      nU H-  u  pEUR                  SSU4SU4/5        UR	                  5         M/     g )Nr  r  class)r  r  r   r   r   )r   r  r   r   r   r  s         rP   r  ClassDef.toXML2  sO    t~~++-.#NI
gy-AGS>,RS $rO   c                 Z    [        U SS 5      nUc  0 nXPl        [        US   5      XRS   '   g )Nr  r  r  )r   r  r  )r   r   r   r   r   r  s         rP   r   ClassDef.fromXML  s5    D+t4	I&N$'g$7	.!rO   )r  r  r   )r:   r;   r<   r=   r   r  r  r  r  r   rN   r9   rO   rP   r  r  8  s      >2> 8rO   r  c                   6    \ rS rSrS	S jrS rS rS rS rSr	g)
AlternateSubsti  Nc                 6    [        U S5      (       d  0 U l        g g )N
alternates)r  r  r   s     rP   r   AlternateSubst.populateDefaults  s    t\** DO +rO   c                     0 nU R                   S:X  aP  [        US   5      nUS   n[        U5      [        U5      :X  d   e[        XE5       H  u  pgUR                  X6'   M     O SU R                   -  5       eX0l        U ? g )Nr   r  AlternateSetre  )r  rf  r   rG  	Alternater  )r   r  r   r  rg  altsrk  alts           rP   r  AlternateSubst.postRead  s~    
;;!/0DEEN+Du:T***,"%--
 - 9*T[[881$KrO   c                    SU l         [        U SS 5      nUc  0 =o l        [        UR	                  5       5      n[        [        U5      5       H  nX4   u  pVUR                  U5      XV4X4'   M      UR                  5         [        5       nU Vs/ s H  oS   PM	     snUl
        / nU Vs/ s H  oS   PM	     n	nU	 H$  n[        5       n
Xjl        UR                  U
5        M&     SU l        XrS.$ s  snf s  snf )Nr   r  r  )r  r  )r  r   r  rq  r   r  r   r   r  r  r  r  r  r   sortCoverageLast)r   r   r  r   r   r   r  rw  rx  setListr  s              rP   r  AlternateSubst.preWrite  s    T<6
+--JZ%%'(s5z"A"XNIy19AEH # 	

j*/0%$1g%0

(-.8.C>D Nd#  !"<< 1.s   C.)C3c                 4   [        U R                  R                  5       5      nU Ho  u  pEUR                  SUS9  UR	                  5         U H#  nUR                  SUS9  UR	                  5         M%     UR                  S5        UR	                  5         Mq     g )Nr  r  r  )r  r  r   r   r   r   r   )r   r  r   r   r   r  r  s          rP   r  AlternateSubst.toXML2  s    t,,./%*!I~Y?!##Ks#;!!# " ^, &+rO   c                     [        U SS 5      nUc  0 nXPl        US   n/ nXuU'   U H3  n[        U[        5      (       d  M  Uu  pnUR	                  US   5        M5     g )Nr  r  )r   r  r   r   r   )	r   r   r   r   r   r  r   r  r  s	            rP   r   AlternateSubst.fromXML  sj    T<6
J(O'N	 #9Ggu--#* DJJuW~&	 rO   )r  r  r  r   r  r9   rO   rP   r  r    s    !=4	 'rO   r  c                   F    \ rS rSrS
S jrS r\S 5       rS rS r	S r
S	rg)LigatureSubsti  Nc                 6    [        U S5      (       d  0 U l        g g )N	ligatures)r  r  r   s     rP   r   LigatureSubst.populateDefaults  r  rO   c                    0 nU R                   S:X  a\  [        US   5      nUS   n[        U5      [        U5      :X  d   e[        [        U5      5       H  nXV   R                  X4U   '   M     O SU R                   -  5       eX0l        U ? g )Nr   r  LigatureSetre  )r  rf  r   r  Ligaturer  )r   r  r   r  rg  ligSetsr   s          rP   r  LigatureSubst.postRead  s    	;;!/0DEE}-Gu:W---3u:&&-j&9&9	(# ' 9*T[[881"KrO   c                     [        U 5      * $ r   r  r  s    rP   _getLigatureSortKey!LigatureSubst._getLigatureSortKey  s    6 JrO   c                    SU l         [        U SS 5      nUc  0 =o l        U(       a  [        [	        [        U5      5      [        5      (       a  [        5       n[        UR                  5       U R                  S9 HT  n[        5       nUSS  Ul        [        U5      Ul        X$   Ul        UR!                  US   / 5      R#                  U5        MV     Un[%        UR'                  5       5      n[)        [        U5      5       H  nXg   u  pUR+                  U5      X4Xg'   M      UR-                  5         [/        5       n
U Vs/ s H  oS   PM	     snU
l        / nU Vs/ s H  oS   PM	     nnU H@  n	[3        5       n/ =ol        U	 H  nUR#                  U5        M     UR#                  U5        MB     SU l        XS.$ s  snf s  snf )Nr   r  r  r   r  )r  r  )r  r   r  r   nextiterr   rF  r  r  r  r  	Componentr   	CompCountLigGlyphr  r   rq  r   r  r   r  r  r  r  r  )r   r   r  newLigaturescompsligaturer   r   r   r  rw  rx  r  r  ligSetligsligs                    rP   r  LigatureSubst.preWrite  s   D+t4	)++IDi$95AA
  6L	 0d6N6NO#:%*12Y"%(Z"$-$4!''a"5<<XF P %IY__&'s5z"A"XNIy19AEH # 	

j*/0%$1g%0
(-.8.C ]F%''D?C  NN6"  !"88 1 /s   F>Gc           	      |   [        U R                  R                  5       5      nU H  u  pEUR                  SUS9  UR	                  5         U HG  nUR                  SUR                  SR                  UR                  5      S9  UR	                  5         MI     UR                  S5        UR	                  5         M     g )Nr  r  r  r+  )r  r  )
r  r  r   r   r   r   r  r/  r  r   )r   r  r   r   r   r  r  s          rP   r  LigatureSubst.toXML2A  s    t~~++-."'I}I>##cllsxx?V $  !!#	 
 ]+ #(rO   c                 Z   [        U SS 5      nUc  0 nXPl        US   n/ nXuU'   U H  n[        U[        5      (       d  M  Uu  pn[	        5       n	US   U	l        US   n
U
(       a  U
R                  S5      O/ U	l        [        U	R                  5      U	l	        UR                  U	5        M     g )Nr  r  r  r+  )r   r  r   r   r  r  rZ  r  r   r  r   )r   r   r   r   r   r  r   r  r  r  r  s              rP   r   LigatureSubst.fromXMLN  s    D+t4	I&N'N	#)Ggu--#* D*C >CL|,J5?J,,S1RCM.CMKK rO   )r  r  r  r   )r:   r;   r<   r=   r   r  r7  r  r  r  r   rN   r9   rO   rP   r  r    s0         8(9T rO   r  c                   6    \ rS rSrS rS rS
SSS\4S jjrSrg	)COLRib  c                 $   UR                  SS9nU R                  5        HL  nUR                  S:w  a  UR                  UR                  5        M0  UR                  X20 S9XR                  '     O   [        S5      e[        R                  " XU5      $ )Nr   )offsetLayerRecordCount)	tableDictz$LayerRecordCount converter not found)	r  getConvertersr   advancerb  readAssertionErrorr   r   )r   rQ  r   	subReaderconvs        rP   r   COLR.decompilec  s     ''q'1	&&(Dyy..!!$//2 $		)R	 HF99 ) !!GHH""466rO   c                 \    S U l         0 U R                  ES[        U R                  S5      0E$ )Nr  )r  r   r   r   r   s     rP   r  COLR.preWritet  s8     !%
mm
t}}>P Q
 	
rO   glyphSetr(   quantizationc                     U R                   S:X  a  g 0 nU R                  R                   H3  n UR                  R	                  XU5      nUc  M%  XSUR                  '   M5     [        U S5      =(       a    U R                  S LnU(       d  U(       a  S U l
        g g U(       d   [        5       U l
        SU R                  l        X0R                  l        g ! [
         a"  nSSKJn  U" SUR                  < 35      UeS nAff = f)Nr   )
TTLibErrorz#Failed to compute COLR ClipBox for ClipListr   )VersionBaseGlyphListBaseGlyphPaintRecordPaintcomputeClipBox	ExceptionfontTools.ttLibr  	BaseGlyphr  r  r  clips)	r   r  r  r  r  clipBoxer  hasClipLists	            rP   computeClipBoxesCOLR.computeClipBoxes~  s    <<1%%::C))224<P "'.cmm$ ; dJ/MDMM4M $   (
'($"'MM%  6 9#--9JKs   C
C=C88C=)r  r  Nr   )	r:   r;   r<   r=   r   r  r  r  rN   r9   rO   rP   r  r  b  s$    7"
( (c ( (rO   r  c                   8   ^  \ rS rSr\S 5       rU 4S jrSrU =r$ )
LookupListi  c                 
   U R                    Hn  nUR                   H[  n[        U5      R                  R	                  S5      (       a      g[        U5      R                  R	                  S5      (       d  MZ      g   Mp     [
        e)NSubstGSUBPosGPOS)LookupSubTabler   r:   endswith
ValueError)r   lsts      rP   tableLookupList.table  sb    Ajj8$$--g66!8$$--e44!	 !  rO   c           
        > U(       a  SU;  d  [         US   R                  ;  a  [        TU ]  X5      $ US   R                  [            U R                     nU R                  5        GHn  nUR                  (       a  [        XR                  / 5      n[        U5       H  u  pg[        U5      U;   a  [        U[        U5         6 nUR                  n	UR                  (       a  UR                   SU	 3n	UR                  (       a  UR                  u  pnU	 SU SU
 SU S3n	UR                  U	5        UR                  5         UR!                  XXtR                  SU4/5        M     GM  UR"                  (       a(  [%        UR"                  S ['        U 5      5      (       d  GM;  [        XR                  S 5      nUR!                  XXTR                  / 5        GMq     g )NDebgz: z in z (/)r  )r!   r   superr  r"  r  repeatr   r   r  strr    locationfeaturerV  r   xmlWriteauxevalvars)r   r  r   	debugDatar  r   lookupIndexrx  infotagscriptlanguager,  r  s                rP   r  LookupList.toXML2  s   T!$DL,=,==7>)22L%%&;<TZZH	&&(D{{ii4)25)9%K;'94.	#k:J0KL"mm99%)YYKr#"7C<<8<5Fg%(EgYb(1"MC!))#.!))+MM!yyG[;Q:R *:  88D4d$D$D))T iuiiD1 )rO   r9   )	r:   r;   r<   r=   propertyr"  r  rN   __classcell__)r  s   @rP   r  r    s!      E  ErO   r  c                       \ rS rSrS rSrg)BaseGlyphRecordArrayi  c                 r   ^ [        U R                  U4S jS9U l        U R                  R                  5       $ )Nc                 :   > TR                  U R                  5      $ r   r   r  r  r   s    rP   ri   /BaseGlyphRecordArray.preWrite.<locals>.<lambda>  s    $//#--2PrO   r  )r  BaseGlyphRecordr   r1  r  s    `rP   r  BaseGlyphRecordArray.preWrite  s1    %  &P 
 }}!!##rO   )rA  Nr[  r9   rO   rP   r;  r;        $rO   r;  c                       \ rS rSrS rSrg)r  i  c                 r   ^ [        U R                  U4S jS9U l        U R                  R                  5       $ )Nc                 :   > TR                  U R                  5      $ r   r>  r?  s    rP   ri   (BaseGlyphList.preWrite.<locals>.<lambda>  s    ts}}7UrO   r  )r  r  r   r1  r  s    `rP   r  BaseGlyphList.preWrite  s1    $*%%+U%
! }}!!##rO   )r  Nr[  r9   rO   rP   r  r    rC  rO   r  c                   (    \ rS rSrSrSrS rS rSrg)ClipBoxFormati  r   r,   c                     X R                   L $ r   Variabler   s    rP   is_variableClipBoxFormat.is_variable  s    }}$$rO   c                     U R                   $ r   rL  r   s    rP   as_variableClipBoxFormat.as_variable  s    }}rO   r9   N)	r:   r;   r<   r=   StaticrM  rN  rQ  rN   r9   rO   rP   rJ  rJ    s    FH%rO   rJ  c                   $    \ rS rSr\rS rS rSrg)ClipBoxi  c                 J   ^  [        U 4S jT R                  5        5       5      $ )Nc              3   P   >#    U  H  n[        TUR                  5      v   M     g 7fr   )r   r   )r   r  r   s     rP   r   #ClipBox.as_tuple.<locals>.<genexpr>  s!     O:N$WT499--:Ns   #&)r   r  r   s   `rP   as_tupleClipBox.as_tuple  s    O$:L:L:NOOOrO   c                 R    U R                   R                   U R                  5        3$ r   )r  r:   rY  r   s    rP   __repr__ClipBox.__repr__  s#    ..))*4==?*;<<rO   r9   N)	r:   r;   r<   r=   rJ  
formatEnumrY  r\  rN   r9   rO   rP   rU  rU    s    JP=rO   rU  c                   @    \ rS rSrS
S jrS rS rS rSS jrS r	S	r
g)r  i  Nc                 6    [        U S5      (       d  0 U l        g g )Nr  )r  r  r   s     rP   r   ClipList.populateDefaults  s    tW%%DJ &rO   c           	         0 nUR                  5       n[        US   5       GH  u  pVUR                  UR                  :  a.  [        R                  SUUR                  UR                  5        MN  / n/ n[        UR                  UR                  S-   5       HB  n	 XI   n
X;  a$  [        R                  " UR                  5      X:'   M1  UR                  U	5        MD     U(       a*  [        R                  SU[        U5      [        U5      5        U(       d  M  [        R                  SU[        U5      [        U5      5        GM"     X0l        g ! [         a    UR                  U	5         M  f = f)N
ClipRecordzCinvalid ClipRecord[%i].StartGlyphID (%i) > EndGlyphID (%i); skippedr   zqClipRecord[%i] overlaps previous records; ignoring redefined clip boxes for the following glyph ID range: [%i-%i]z:ClipRecord[%i] range references missing glyph IDs: [%i-%i])rE  r  StartGlyphID
EndGlyphIDr  r  r  
IndexErrorr   r1  rU  minr'  r  )r   r  r   r  r   r   r  redefinedGlyphsmissingGlyphsr   r  s              rP   r  ClipList.postRead  sG   '')
 67FA#..0/$$NN  OM !1!13>>A3EF&/E %#'99S[[#9EL#**73 G 8 (( }S&&	A 8L 
/ " !((1s   EE+*E+c                 4   [        [        5      n0 nU R                  R                  5        H3  u  p4UR	                  5       nX   R                  U5        XR;  d  M/  XBU'   M5     UR                  5        VVs0 s H  u  pV[        U5      X%   _M     snn$ s  snnf r   )r   rq  r  r   rY  r   	frozenset)r   glyphsByClipuniqueClipsr   r  r  r  s          rP   groupsClipList.groups  s    "4("&**"2"2"4I""$C$$Y/%#*C 	 #5 DPCUCUCW
CWKCIf{//CW
 	
 
s   6Bc                   ^ [        U S5      (       d  0 U l        0 nUR                  5       mU R                  5       R	                  5        H  u  p4[        U4S jU 5       5      nU(       d  M#  US   nU//nUSS   H3  nXS-   :w  a&  US   R                  U5        UR                  U/5        UnM5     US   R                  U5        U H  u  pX4U;  d   eXBX4'   M     M     / n[        UR	                  5       5       H5  u  u  pn[        5       nXl        Xl	        XLl
        UR                  U5        M7     [        U5      US.nU$ )Nr  c              3   <   >#    U  H  oT;   d  M
  TU   v   M     g 7fr   r9   )r   r   glyphMaps     rP   r   $ClipList.preWrite.<locals>.<genexpr>0  s!      5;	H?T##Vs   	r   r   r  )	ClipCountrc  )r  r  getReverseGlyphMapro  r   r  r   rc  rd  re  rU  r   )r   r   clipBoxRangesr  r  r  r  r  r   r  r   clipRecordsrecordr  rs  s                 @rP   r  ClipList.preWrite*  sW   tW%%DJ**,#{{}224OF 5; H A;DfXF#AB<Qh&2J%%d+MM7),	 (
 2Jd#$
|=888.5ul+ %  5$ %+M,?,?,A%B!LU'\F"' #$Nv& &C [)%
 rO   c                 6   U(       a  UOU R                   R                  nUc  / n[        U S5      (       a  UR                  SU R                  45        UR                  XS5        UR                  5         [        U R                  5       R                  5       S S9 H  u  pgUR                  S5        UR                  5         [        U5       H#  nUR                  SUS9  UR                  5         M%     UR                  SSUR                  4/5        UR                  5         UR                  X5        UR                  S5        UR                  5         UR                  S5        UR                  5         M     UR                  U5        UR                  5         g )Nr  c                     [        U S   5      $ )Nr   )rg  )rx  s    rP   ri    ClipList.toXML.<locals>.<lambda>X  s    CQLrO   r  Clipr  r,  rU  )r  r:   r  r   r  r   r   r  ro  r   r   r  r   )	r   r  r   r   r   	tableNamer  r  r   s	            rP   r   ClipList.toXMLN  sP    Ddnn&=&=	=E4""LL(DKK019,%KKM!'@ 
OF v&#F^	##G9#=!!# , yHgnn+E*FGNN9+Y'V$ 
 	#rO   c                    [        U SS 5      nUc	  0 =U l        nUS:X  d   e/ nS nU H  n[        U[        5      (       d  M  Uu  pnUS:X  a  UR	                  US   5        M;  US:X  d  MC  [        5       n[        US   5      Ul        U H1  n[        U[        5      (       d  M  Uu  pnUR                  XX45        M3     M     U(       a  U H  n	XuU	'   M	     g g )Nr  r~  r  r   rU  r  )	r   r  r   r   r   rU  r   r  r   )
r   r   r   r   r   r  r  r  elemr   s
             rP   r   ClipList.fromXMLi  s    gt,=!##DJv~~DdE**#' DweGn-"!)!)%/!:#D%dE22 +/(DOOD?	 $  #	#*i  $ rO   )r  r   r%  )r:   r;   r<   r=   r   r  ro  r  r   r   rN   r9   rO   rP   r  r    s"    )V

"H6+rO   r  c                        \ rS rSrSrSrSrSrg)
ExtendModei  r   r   r,   r9   N)r:   r;   r<   r=   PADREPEATREFLECTrN   r9   rO   rP   r  r    s    
CFGrO   r  c                       \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr g) CompositeModei  r   r   r,   rp   r-   r~   r=  r>  r.   r?  rX   r@  rV   rA  r   rB  r/                        r}            r9   N)!r:   r;   r<   r=   CLEARSRCDESTSRC_OVER	DEST_OVERSRC_INDEST_INSRC_OUTDEST_OUTSRC_ATOP	DEST_ATOPXORPLUSSCREENOVERLAYDARKENLIGHTENCOLOR_DODGE
COLOR_BURN
HARD_LIGHT
SOFT_LIGHT
DIFFERENCE	EXCLUSIONMULTIPLYHSL_HUEHSL_SATURATION	HSL_COLORHSL_LUMINOSITYrN   r9   rO   rP   r  r    s    E
CDHIFGGHHI
CDFGFGKJJJJIHGNINrO   r  c                       \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!S r"S!r#S" r$S# r%S$r&g%)&PaintFormati  r   r,   rp   r-   r~   r=  r>  r.   r?  rX   r@  rV   rA  r   rB  r/   r  r  r  r  r  r  r  r}   r  r  r           r  r0   c                 8    U R                   R                  S5      $ )NPaintVar)r   
startswithr   s    rP   rN  PaintFormat.is_variable  s    yy##J//rO   c                     U R                  5       (       a  U $  [        R                  SU R                  SS   3   $ ! [         a     g f = f)Nr  r~   )rN  r  __members__r   KeyErrorr   s    rP   rQ  PaintFormat.as_variable  sO    K	**Xdiim_+EFF 		s   "< 
A	A	r9   N)'r:   r;   r<   r=   PaintColrLayers
PaintSolidPaintVarSolidPaintLinearGradientPaintVarLinearGradientPaintRadialGradientPaintVarRadialGradientPaintSweepGradientPaintVarSweepGradient
PaintGlyphPaintColrGlyphPaintTransformPaintVarTransformPaintTranslatePaintVarTranslate
PaintScalePaintVarScalePaintScaleAroundCenterPaintVarScaleAroundCenterPaintScaleUniformPaintVarScaleUniformPaintScaleUniformAroundCenter PaintVarScaleUniformAroundCenterPaintRotatePaintVarRotatePaintRotateAroundCenterPaintVarRotateAroundCenter	PaintSkewPaintVarSkewPaintSkewAroundCenterPaintVarSkewAroundCenterPaintCompositerN  rQ  rN   r9   rO   rP   r  r    s    OJMJNNNJM "$&!')$KN !#IL!N0rO   r  c            
           \ rS rSr\rS rSS jrS\S\	\
R                     4S jrS\S    4S jrS\4S	 jrS\4S
 jr SS\SSS\S\\   4S jjrSrg)r	  i  c                      U R                  U R                  5      R                  $ ! [         a    [	        SU R                   35      ef = f)NzUnknown Paint format: )r^  r  r   r  NotImplementedErrorr   s    rP   getFormatNamePaint.getFormatName  sI    	N??4;;/444 	N%(>t{{m&LMM	Ns	   $' #A
Nc                 j   U(       a  UOU R                   R                  nUc  / nUR                  SU R                  45        UR	                  XS5        UR                  U R                  5       5        UR                  5         U R                  X5        UR                  U5        UR                  5         g )Nr  )
r  r:   r   r  r   rV  r  r   r  r   )r   r  r   r   r   r  s         rP   r   Paint.toXML  s     Ddnn&=&=	=Eh,-9,$,,./I$#rO   colrreturnc              #   :  #    U R                   [        R                  :X  ac  / nUR                  b  UR                  R                  nS [        X R                  U R                  U R                  -    5       5        S h  vN   g U R                   [        R                  :X  as  UR                  R                   H@  nUR                  U R                  :X  d  M  [        R                  " SUR                  S9v     g    [        U R                  < S35      eU R!                  5        Hn  nUR"                  c  M  [%        UR"                  ['        U 5      5      (       d  M8  [)        XR*                  5      n[        R                  " UR*                  US9v   Mp     g  GN7f)Nc              3   P   #    U  H  u  p[         R                  " S X!S9v   M     g7f)Layers)r   r   r  N)r   SubTableEntry)r   r   rh   s      rP   r   +Paint.iterPaintSubTables.<locals>.<genexpr>  s*      DA ''XQHs   $&r  )r   r   z not in colr.BaseGlyphList)r  r  r  	LayerListr	  r  FirstLayerIndex	NumLayersr  r  r  r  r  r   r  r  r  
tableClass
issubclassr   r   r   )r   r  layersry  r  r   s         rP   iterPaintSubTablesPaint.iterPaintSubTables  s=    ;;+555F~~)--%//$2F2F2WX   ;;+444,,AA##tzz1#11{&,,WW B
 $**/IJKK&&(D*z$//4PT:/V/Vii0--499EJJ )!s&   A<F>F?AFAF7"F<Fc                 b    U R                  U5       Vs/ s H  o"R                  PM     sn$ s  snf r   )r  r   )r   r  ps      rP   getChildrenPaint.getChildren  s)    !%!8!8!>?!>A!>???s   ,c                    ^ [        U5      (       d  [        S5      e[        U U4S jS9 H  nUS   R                  nU" U5        M     g)zEDepth-first traversal of graph rooted at self, callback on each node.zcallback must be callablec                 &   > U R                  T5      $ r   r  paintr  s    rP   ri    Paint.traverse.<locals>.<lambda>      %2J2J42PrO   iter_subtables_fnr  N)callable	TypeErrorr
   r   )r   r  callbackpathr  s    `   rP   traversePaint.traverse  sE    !!788"$P
D HNNEUO	
rO   c                 	   U R                   [        R                  :X  aX  U R                  n[        UR                  UR
                  UR                  UR                  UR                  UR                  5      $ U R                   [        R                  :X  a+  [        R                  " U R                  U R                  5      $ U R                   [        R                  :X  a+  [        R                  " U R                  U R                   5      $ U R                   [        R"                  :X  au  [        R                  " U R$                  U R&                  5      R                  U R                  U R                   5      R                  U R$                  * U R&                  * 5      $ U R                   [        R(                  :X  a   [        R                  " U R                  5      $ U R                   [        R*                  :X  aj  [        R                  " U R$                  U R&                  5      R                  U R                  5      R                  U R$                  * U R&                  * 5      $ U R                   [        R,                  :X  a)  [        R.                  " [1        U R2                  5      5      $ U R                   [        R4                  :X  as  [        R                  " U R$                  U R&                  5      R/                  [1        U R2                  5      5      R                  U R$                  * U R&                  * 5      $ U R                   [        R6                  :X  a>  [        R8                  " [1        U R:                  * 5      [1        U R<                  5      5      $ U R                   [        R>                  :X  a  [        R                  " U R$                  U R&                  5      R9                  [1        U R:                  * 5      [1        U R<                  5      5      R                  U R$                  * U R&                  * 5      $ [        U R                   5      RA                  5       (       a  [C        SU R                    35      e[        $ )NzVariable Paints not supported: )"r  r  r  r   xxyxxyyydxdyr  r   	translater  rT   r\   r]   r  centerXcenterYr  r  r  rotater   angler  r  skew
xSkewAngle
ySkewAngler  rN  r  )r   r]  s     rP   getTransformPaint.getTransform  s   ;;+444AQTT144qttQTT144@@[[K666%%dggtww77[[K222>>$++t{{;;[[K>>>""4<<>t{{DKK0DLL=4<<-8
 [[K999>>$**--[[KEEE""4<<>tzz"DLL=4<<-8
 [[K333??74::#677[[K???""4<<>

+,DLL=4<<-8
 [[K111==$//)9!:GDOO<TUU[[K===""4<<>gt./1IJDLL=4<<-8
 t{{#//11%(G}&UVVrO   r  r(   r  c                   ^ [        U5      n[        U U4S jS9 H~  nUS   R                  nUR                  [        R
                  :X  d  M2  [        [        R                  S U 5       [        5      nX&R                     R                  [        XG5      5        M     UR                  c  g [        5       n[        [         R"                  5      Ul        [%        UR                  U5      u  Ul        Ul        Ul        Ul        U$ )Nc                 &   > U R                  T5      $ r   r  r  s    rP   ri   &Paint.computeClipBox.<locals>.<lambda>G  r  rO   r  r  c              3   T   #    U  H  oR                   R                  5       v   M      g 7fr   )r   r  )r   r!  s     rP   r   'Paint.computeClipBox.<locals>.<genexpr>M  s     <tXX**,,ts   &()r   r
   r   r  r  r  r   r   r   r   r  drawr   boundsrU  r  rJ  rS  r   xMinyMinxMaxyMax)	r   r  r  r  penr  r  transformationcbs	    `       rP   r
  Paint.computeClipBoxB  s     x("$P
D HNNE||{555!'''<t<"
 %**<+LM
 ::Y,,-	-9#**l-S*"'27	rO   r9   r%  r  )r:   r;   r<   r=   r  r^  r  r   r  r$   r   r  r  r%   r  r  r   r  r  r&   rU  r
  rN   r9   rO   rP   r	  r	    s    JN
Kt K9P9P0Q K6@4= @	T 	)i )X HI$1AD	'	 rO   r	  )
Mark1Array)DefaultLangSys)MarkCoverageBaseCoverageLigatureCoverageMark1CoverageMark2CoverageBacktrackCoverageInputCoverageLookAheadCoverageVertGlyphCoverageHorizGlyphCoverageTopAccentCoverageExtendedShapeCoverageMathKernCoverage)	ClassDef1	ClassDef2BacktrackClassDefInputClassDefLookAheadClassDefGlyphClassDefMarkAttachClassDef)EntryAnchor
ExitAnchor
BaseAnchorLigatureAnchorMark2Anchor
MarkAnchor)
XPlaDevice
YPlaDevice
XAdvDevice
YAdvDeviceXDeviceTableYDeviceTableDeviceTable)	HorizAxisVertAxis)DefaultMinMax)MinCoordMaxCoord)DefJstfLangSys)ShrinkageEnableGSUBShrinkageDisableGSUBExtensionEnableGSUBExtensionDisableGSUB)ShrinkageEnableGPOSShrinkageDisableGPOSExtensionEnableGPOSExtensionDisableGPOS)ShrinkageJstfMaxExtensionJstfMax)TopRightMathKernTopLeftMathKernBottomRightMathKernBottomLeftMathKern)VertGlyphConstructionHorizGlyphConstruction)	MarkArrayLangSysr  r  AnchorDeviceAxisMinMax	BaseCoordJstfLangSysJstfGSUBModListJstfGPOSModListJstfMaxMathKernMathGlyphConstructionc                    SnUR                   nUR                  c  US-
  nUS:  a  U$ UR                  S:X  a  SnOUR                  S:X  a  SnXR                     R                  R                  R
                  nXS   nUR                  S   R                  R                  W:X  a:  US-
  nUS:  a  U$ XS   nUR                  S   R                  R                  U:X  a  M:  [        U[        U5      5       H  nXS   nUR                  U:w  d  M  XFl        [        [        UR                  5      5       HJ  nUR                  U   n[        UR                     U   n	U	" 5       n
SU
l        Xl        XR                  U'   ML     M     SnU$ )a  Either the offset from the LookupList to a lookup overflowed, or
an offset from a lookup to a subtable overflowed.

The table layout is::

  GPSO/GUSB
          Script List
          Feature List
          LookUpList
                  Lookup[0] and contents
                          SubTable offset list
                                  SubTable[0] and contents
                                  ...
                                  SubTable[n] and contents
                  ...
                  Lookup[n] and contents
                          SubTable offset list
                                  SubTable[0] and contents
                                  ...
                                  SubTable[n] and contents

If the offset to a lookup overflowed (SubTableIndex is None)
        we must promote the *previous* lookup to an Extension type.

If the offset from a lookup to subtable overflowed, then we must promote it
        to an Extension Lookup type.
r   r   r  r>  r  r?  )LookupListIndexSubTableIndex	tableTyper"  r  r  r  r  
LookupTyper  r   lookupTypesr  ExtSubTable)ttfoverflowRecordokr2  extTypelookupslookupsisubTableextSubTableClassextSubTables              rP   fixLookupOverFlowsr~    sy   8 
B 00K##+!AoQ	6)		!	!V	+**+11<<CCG!F
//!

&
&
1
1W
<!Ao?I%	 //!

&
&
1
1W
< [#g,7%' 'C01!??2.#.~/G/G#H#Q .0%&"*2'&1# 2	 8 
BIrO   c                 T   Sn[        U R                  R                  5       5      n[        U5      nUR                  S;   a  US-  nOUR                  S:X  a  UR
                  S-
  n0 Ul        [        WU5       H+  nXG   nUS   n	US   UR                  U	'   U R                  U		 M-     U$ )Nr   r  r  r,   r  r   )r  r   r   r   itemName	itemIndexr  )
oldSubTablenewSubTableru  rv  
oldMappingoldLennewLenr   rx  r  s
             rP   splitMultipleSubstr    s    	
B++1134J_F"== 1		 	 J	.  ))A-K66"}1g#'7C $	 # IrO   c                    Sn[        U S5      (       a  U R                  Ul        [        U R                  R	                  5       5      n[        U5      nUR                  S;   a  US-  nOUR                  S:X  a  UR                  S-
  n0 Ul        [        WU5       H+  nXG   nUS   n	US   UR                  U	'   U R                  U		 M-     U$ )Nr   r  r  r,   r  r   )	r  r  r  r  r   r   r  r  r  )
r  r  ru  rv  oldAltsr  r  r   rx  r  s
             rP   splitAlternateSubstr  	  s    	
B{.//'2'C'C$[++1134G\F"== 1		 	 N	2  ))A-K66"z1g&*1gs#""3'	 # IrO   c                 T   Sn[        U R                  R                  5       5      n[        U5      nUR                  S;   a  US-  nOUR                  S:X  a  UR
                  S-
  n0 Ul        [        WU5       H+  nXG   nUS   n	US   UR                  U	'   U R                  U		 M-     U$ )Nr   r  r,   r  r   )r  r  r   r   r  r  r  )
r  r  ru  rv  oldLigsr  r  r   rx  r  s
             rP   splitLigatureSubstr  ,	  s    	
B[**0023G\F"== 1		 	 M	1  ))A-K66"z1g%)!Wc"!!#&	 # IrO   c           	      (  ^ U nSnU R                   Ul         U R                   S:X  Ga  [        U R                  5      S:  a  S H  n[        X[	        X5      5        M     U R
                  R                  5       Ul        U R
                  R                  nU R                  n[        U R                  5      S-  mUS T U R
                  l        US T U l        UTS  UR
                  l        UTS  Ul        [        U R                  5      U l        [        UR                  5      Ul        SnU$ U R                   S:X  Ga?  [        U R                  5      S:  Ga%  [        U S5      (       d'  [        U R                  S   R                  5      U l        S H  n[        X[	        X5      5        M     SU l        U R
                  R                  5       Ul        U R                  R                  5       Ul        U R
                  R                  nU R                  R                  nU R                  n[        U R                  5      S-  m[!        U4S	 jUR#                  5        5       5      n	U V
s/ s H  oU	;  d  M
  U
PM     sn
U R
                  l        UR#                  5        VVs0 s H  u  pUT:  d  M  X_M     snnU R                  l        US T U l	        U V
s/ s H  oU	;   d  M
  U
PM     sn
UR
                  l        UR#                  5        VVs0 s H  u  pUT:  d  M  XT-
  _M     snnUR                  l        UTS  Ul	        [        U R                  5      U l        [        UR                  5      Ul        SnU$ s  sn
f s  snnf s  sn
f s  snnf )
NFr   )ValueFormat1ValueFormat2r,   TClass2Countr   )r  r7  r  r  c              3   <   >#    U  H  u  pUT:  d  M  Uv   M     g 7fr   r9   )r   krh   oldCounts      rP   r   splitPairPos.<locals>.<genexpr>w	  s     I&7da1=&7s   	)r  r   PairSetr   r   r  r  r  PairSetCountClass1Recordr  Class2Recordr  	DontSharer6  r  r  r   Class1Count)r  r  ru  r!  rv  r   coverager  r  	newGlyphsr  r  rh   r  s                @rP   splitPairPosr  F	  s1   	B	B$++KQ3{':':#;a#?2DKw{'AB 3
  +33==?''..%%{**+q0&.y&9#%ix0&.xy&9#%hi0#&{':':#; #&{':':#; T IQ 
		q	 S)A)A%BQ%F{M22&)+*B*B1*E*R*R&SK#NDKw{'AB O !%  +33==? + 5 5 ? ? A''..))33	**{//0A5Iioo&7II	2:&Q(Qy>Pq(&Q#&__.+
.TQ!h,DAD.+
' $+9H#5 2:&M(Q9nq(&M#*3//*;+
*;$!q8|AH*;+
' $+89#5 "%k&>&>"?"%k&>&>"?I# 'R+

 'N+
s0   )	M>6M>!N1N	N	%N	N 	Nc                 R   U R                   nUS:  a  gUS-  nX4-
  n/ / pv/ / p[        U R                  R                  U R                  R
                  5       Hp  u  pUR                  U:  a$  UR                  U
5        UR                  U5        M9  U=R                  U-  sl        UR                  U
5        U	R                  U5        Mr     / / pU R                  R                   Hm  nUR                  5       UR                  5       nnUR                  S U Ul        UR                  US  Ul        UR                  U5        UR                  U5        Mo     U R                  Ul        X`R                  l        U R                  R                  5       Ul        XR                  l        U R                  Ul        X@l         XQl         XpR                  l        U R                  R                  5       Ul        XR                  l        [        U5      U R                  l        [        U	5      UR                  l        XR                  l	        U R                  R                  5       Ul        XR                  l	        [        U5      U R                  l        [        U5      UR                  l        g)Nr,   FT)
ClassCountrG  r)  r  r`  
MarkRecordr  r   	BaseArray
BaseRecordr  r?  r  r*  r   	MarkCount	BaseCount)r  r  ru  
classCountoldClassCountnewClassCountoldMarkCoverageoldMarkRecordsnewMarkCoveragenewMarkRecordsr   
markRecordoldBaseRecordsnewBaseRecordsr  oldBaseRecordnewBaseRecords                    rP   splitMarkBasePosr  	  s<   ''JA~!OM.M&("^&("^!$  '')>)>)I)I"	 m+""9-!!*--""9-!!*-" &(N$$//'*}}}#&>>.=#A #&>>-.#A m,m, 0 %++K&5#*77AACK&5#  +77K**'5$'11;;=K'5$&).&9K#&).&9K#'5$'11;;=K'5$&).&9K#&).&9K#rO   )r,   rp   r-   )r,   r-   r  r  c                    XR                      R                  nUR                  R                  UR                     nUR
                  nUR                  U   n[        US5      (       d  SUl        g[        US5      (       a  UR                  R                  R                  nUnUR                  n[        UR                      UR                  R                     nU" 5       n	UR                  U	l        U	n
[        UR                      U   nU" 5       nXl	        O5UR                  R                  n[        UR                      U   nU" 5       nUn
[        US5      (       a  UR                  S-   Ul         [        UR                      U   nU" X\U5      nU(       a  UR                  R'                  US-   U
5        U$ ! [          a$    ["        R%                  SUR                   U5         gf = f)zb
An offset has overflowed within a sub-table. We need to divide this subtable into smaller parts.
r  Trs  SubTableCountr   z)Don't know how to split %s lookup type %sF)rp  r"  r  r  rn  ro  r  r  r  rs  r  rq  rr  r  r  
splitTabler  r  errorr9  )rt  ru  r"  ry  subIndexsubtablesubTableTyper}  newExtSubTableClassnewExtSubTabletoInsertnewSubTableClassr  	splitFuncrv  s                  rP   fixSubTableOverFlowsr  	  s    (()//E$$^%C%CDF++Hx(H 8[))!x''  ++55@@**).*B*BC!!,,
 -. + 2 2!&~'?'?@N&(%0"))44&~'?'?@N&(v''%33a7~778F	 
8.	9B	x!|X6I  		7$$	

 s   2F9 9+G'&G'c                     SS K n SSKJn  U R                  S5      n[        5       nU Hl  u  pE[        nUR                  U5      nU(       a$  UR                  S5      nUS   S   n[        U5      nXC;  d  MN  [        XF40 5      n	US;   a  SU	l	        XU'   Mn     U HP  u  pJUR                  S5      (       d  M  [        U5      S:  d  M.  USS  U;   d  M9  X4   nX4SS     nXl        Xl        MR     [        R                  5        H  u  pX=   nU H  nXU'   M	     M     [         ["        [$        [&        [(        [*        [,        [.        S	.[0        [2        [4        [6        [8        [:        [<        [>        [@        S
.	S[B        0[D        [F        [H        [B        [J        S.S.q&[L        S   [L        S'   [L        RO                  5        H$  nUR                  5        H  u  nn	UU	l(        M     M&     S[R        0q*[W        SS5       H  n[X        [T        SU-  '   M     [W        SS5       H  n[Z        [T        SU-  '   M     SSK.J/n  U H  u  pEUR                  U5      nU(       ap  URa                  5       u  nn[c        U5      nX4   n	[e        U	S5      (       d  0 U	l3        0 U	l4        U" USS  U5      u  nnUU	Rf                  U'   UU	Rh                  U'   M  X4   n	U" XS5      u  U	l3        U	l4        M     g )Nr   r   )otDataz([A-Za-z0-9]+)Format(\d+)$r  TVarrp   )r   r,   rp   r-   r~   r=  r>  r.   )	r   r,   rp   r-   r~   r=  r>  r.   r?  r-   )r   r   r,   r-   r~   )r  r  mortmorxr  JSTFsizer  zss%02dd   zcv%02d)buildConverters
converters)5rer  r   globalsr   matchgroupr   r   r  r  r   	NoVarTypeVarType_equivalentsr   r]  r  r  r  ContextSubstChainContextSubstExtensionSubstReverseChainSingleSubst	SinglePosPairPos
CursivePosMarkBasePos
MarkLigPosMarkMarkPos
ContextPosChainContextPosExtensionPosNoncontextualMorphRearrangementMorphContextualMorphLigatureMorphInsertionMorphrr  r   rq  r  r  r  r  r  otConvertersr  ro  r  r  r  convertersByName)r  r  	formatPat	namespacer   r"  	baseClassm
formatTyper  r   varType	noVarTypebaser  r  
lookupEnumenumr   r  r  r  r  s                          rP   _buildClassesr  
  s   

89I	I 	OOD!771:D q!J8DI t\2.C'' $!dO! & ??5!!c$i!mQRI8MoG!qr(+I ) '  #((*
C!cN  +  &	
 

 !
 "!
3!KD &f-K!((*
#))+ID#!CN , + 	! 1f*C(Q,' 1f*H(Q,'  .OOD!88:LD&[F/C3--!#')$+:59i+P(J(%/CNN6"+;C  ( /C3B53T0CNC0! rO   c                 $    U c  / $ U R                   $ r   )r  )r  s    rP   rf  rf  
  s    	rO   )__doc__r1  r  r   	functoolsr   mathr   	itertoolscollectionsr   r   r  r   %fontTools.ttLib.tables.TupleVariationr	   !fontTools.ttLib.tables.otTraverser
   fontTools.misc.arrayToolsr   fontTools.misc.roundToolsr   fontTools.misc.transformr   r   r   fontTools.misc.textToolsr   r   r   fontTools.misc.vectorr   fontTools.pens.boundsPenr   fontTools.pens.transformPenr   otBaser   r   r   r   r   fontTools.misc.fixedToolsr   r   r   r   r   r   r   r    fontTools.feaLib.lookupDebugInfor    r!   loggingre   arraysysr"   typingr#   r$   r%   r&   r'   fontTools.ttLib.ttGlyphSetr(   	getLoggerr:   r  r*   rQ   rB   rC   rD   rF   rG   rK   rL   rH   rI   r   r   r   r   r   r   r  objectr  r  r#  r9  re  rw  r}  r  r  r  r  r  r  r   r  rA  rT  r]  r  r  r  r  r  r  r;  r  rJ  rU  r  r  r  r  r	  r  r~  r  r  r  r  r  r  r  r  rf  r9   rO   rP   <module>r     sT        / / @ < 2 - M M = = ( 5 4   T    
  ? ?6 !* *6 '7  ,**Aq! ,**Aq! **;*I*I2sTUV'(9(F(FAqQ'(9(F(FAqQ&'8'D'Db$PQR&'8'D'Db#qQ)*;*J*JAqRST)*;*J*JAqRST $ &%)%	 +*2*		$.>"vB vBr. .D"F "v 
# #*R0y R0j>@I >@B! !J) JZD#9 D#NTI T	 		 		] 	V&' V&v   IP7@ IPX4?	 4?n
I 
$M,* M,`H, HVg8' g8TC'- C'Lw, wt6(9 6(r+E +E\$9 $$I $G =.w7 =R+/8 R+j G >+' +\@,W5 @T !" ! ' QYMj<~4:4DN9~ 		 	

25vkU^ rO   