Ë
    £ehh{ ã                   ó  — d Z ddlZddlmZ ddlmZ ddlmZ ddlZddl	m
Z
mZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZmZ ddlmZmZmZ ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z%m&Z&m'Z'm(Z(m)Z) ddl*m+Z,m-Z.m/Z0m1Z2 ddl3m4Z4m5Z5 ddl6Z6ddl7Z7ddl8Z8ddl9Z9ddlm:Z: ddl;m<Z<m=Z=m>Z>m?Z?m@Z@ e<rddlAmBZB  e6j†                  eD«      ZE G d„ de:«      ZF edg d¢«      ZG eGeFj�                  ddd«       eGeFj’                  ddd«       eGeFj”                  ddd«       eGeFj–                  ddd«       eGeFj˜                  ddd«       eGeFjš                  ddd«       eGeFjœ                  ddd«       eGeFjž                  ddd«       eGeFj                   ddd«      d œ	ZQd!„ d"„ d#„ d$„ d%œZRd&„ d'„ d(„ d)„ d%œZSd*„ ZTd+„ ZU G d,„ d-«      ZV G d.„ d/«      ZW G d0„ d1eX«      ZY G d2„ d3eX«      ZZ G d4„ d5eX«      Z[ G d6„ d7e[«      Z\ G d8„ d9e[«      Z] G d:„ d;eX«      Z^ G d<„ d=e[«      Z_ G d>„ d?e[«      Z` G d@„ dAe%«      Za G dB„ dCea«      Zb G dD„ dEea«      Zc G dF„ dGea«      Zd G dH„ dIe&«      ZedJZf G dK„ dL e)dM«      «      Zg G dN„ dOe%«      Zh G dP„ dQe%«      Zi G dR„ dSe&«      Zj G dT„ dUe&«      Zk G dV„ dWe&«      Zl G dX„ dYe&«      Zm G dZ„ d[e&«      Zn G d\„ d]e%«      Zo G d^„ d_e%«      Zp G d`„ dae%«      Zq G db„ dce%«      Zr G dd„ dee«      Zs G df„ dg e)dM«      «      Zt G dh„ di e)dM«      «      Zu G dj„ dke«      Zv G dl„ dme«      Zw G dn„ doe«      Zx G dp„ dq e)dM«      «      Zydrdsdtdudvdwdxdydzd{d|d}d~dd€d�œZzd‚„ Z{dƒ„ Z|d„„ Z}d…„ Z~d†„ Zd‡„ Z€e|e}e~dˆœee€d‰œdŠœZ�d‹„ Z‚dŒ„ Zƒ eƒ«        d�„ Z„y)ŽzáfontTools.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                   óL   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZy)ÚVarComponentFlagsr   é   é   é   é   é    é@   é€   é   i   é   é   é   é    é @  l     ÿ N)Ú__name__Ú
__module__Ú__qualname__Ú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© ó    ú]/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/fontTools/ttLib/tables/otTables.pyr*   r*   4   sW   „ Ø#Ðà€Ià!'ÐØ$ÐàÐØÐØ€Mà€Nà€LØ€LØ€NØ€Nà€Là€KØ€Kà)�MrL   r*   ÚVarTransformMappingValues)ÚflagÚfractionalBitsÚscaleÚdefaultValueé   é´   é
   iLÿÿÿ)	Ú
translateXÚ
translateYÚrotationÚscaleXÚscaleYÚskewXÚskewYÚtCenterXÚtCenterYc                 ó.   — t        j                  d| «      S )Nú>B©ÚstructÚpack©Úvs    rM   ú<lambda>rf   f   ó   € ”—‘˜T 1Ó%€ rL   c                 ó.   — t        j                  d| «      S )Nú>Hra   rd   s    rM   rf   rf   g   rg   rL   c                 ó4   — t        j                  d| «      dd  S )Nú>Lr   ra   rd   s    rM   rf   rf   h   s   € ”—‘˜T 1Ó% a bÐ)€ rL   c                 ó.   — t        j                  d| «      S )Nrk   ra   rd   s    rM   rf   rf   i   rg   rL   )r   r+   é   r,   c                 ó4   — t        j                  d| «      d   S )Nr`   r   ©rb   Úunpackrd   s    rM   rf   rf   l   ó   € ”—‘˜t QÓ'¨Ñ*€ rL   c                 ó4   — t        j                  d| «      d   S )Nri   r   ro   rd   s    rM   rf   rf   m   rq   rL   c                 ó:   — t        j                  dd| z   «      d   S )Nrk   ó    r   ro   rd   s    rM   rf   rf   n   s   € ”—‘˜t U¨Q¡YÓ/°Ñ2€ rL   c                 ó4   — t        j                  d| «      d   S )Nrk   r   ro   rd   s    rM   rf   rf   o   rq   rL   c                 ó‚  — | |   }|dk  r||dz   fS |dk  r|dz
  dz  | |dz      z  |dz   fS |dk  r"|dz
  dz  | |dz      dz  z  | |dz      z  |dz   fS |d	k  r.|dz
  d
z  | |dz      dz  z  | |dz      dz  z  | |dz      z  |dz   fS |d	z
  dz  | |dz      d
z  z  | |dz      dz  z  | |dz      dz  z  | |dz      z  |dz   fS )zlRead a variable-length number from data starting at index i.

    Return the number and the next index.
    r1   r   éÀ   r-   r+   éà   r.   rm   éð   é   r,   r/   é   rK   )ÚdataÚiÚb0s      rM   Ú_read_uint32varr   s   sX  € ð 
ˆa‰€BØ	ˆD‚yØ�1�q‘5ˆyÐØ	ˆdŠØ�T‘	˜aÑ $ q¨1¡u¡+Ñ-¨q°1©uÐ4Ð4Ø	ˆdŠØ�T‘	˜bÑ  4¨¨A©¡;°!Ñ#3Ñ3°d¸1¸q¹5±kÑAÀ1ÀqÁ5ÐHÐHØ	ˆdŠØ�T‘	˜bÑ  4¨¨A©¡;°"Ñ#4Ñ4°t¸AÀ¹E±{ÀaÑ7GÑGÈ$Ø�‰EñK
ñ 
àˆq‰5ðð 	ð �T‘	˜bÑ  4¨¨A©¡;°"Ñ#4Ñ4°t¸AÀ¹E±{ÀbÑ7HÑHÈ4Ø�‰EñL
àñLñ à�a˜!‘e‘ñà !™eð$ð 	$rL   c                 óL  — | dk  rt        j                  d| «      S | dk  rt        j                  d| dz  «      S | dk  rt        j                  d| dz  «      d	d
 S | dk  rt        j                  d| dz  «      S t        j                  dd«      t        j                  d| «      z   S )z:Write a variable-length number.

    Return the data.
    r1   r`   r7   ri   é €  i    rk   i  À r   Ni   l      @ ry   ra   rd   s    rM   Ú_write_uint32varr‚   Š   s˜   € ð
 	ˆ4‚xÜ�{‰{˜4 Ó#Ð#Ø	
ˆVŠÜ�{‰{˜4 ! f¡*Ó.Ð.Ø	
ˆXŠÜ�{‰{˜4 ! h¡,Ó0°°Ð4Ð4Ø	
ˆZŠÜ�{‰{˜4 ! j¡.Ó2Ð2ä�{‰{˜4 Ó&¬¯©°T¸1Ó)=Ñ=Ð=rL   c                   óD   — e Zd Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zy)ÚVarComponentc                 ó$   — | j                  «        y ©N)ÚpopulateDefaults©Úselfs    rM   Ú__init__zVarComponent.__init__œ   s   € Ø×ÑÕrL   Nc                 ó”   — d| _         d | _        d | _        d | _        d| _        t
        | _        t
        | _        t        «       | _	        y )Nr   rK   )
ÚflagsÚ	glyphNameÚconditionIndexÚaxisIndicesIndexÚ
axisValuesÚNO_VARIATION_INDEXÚaxisValuesVarIndexÚtransformVarIndexr   Ú	transform©r‰   Ú
propagators     rM   r‡   zVarComponent.populateDefaultsŸ   sA   € ØˆŒ
ØˆŒØ"ˆÔØ $ˆÔØˆŒÜ"4ˆÔÜ!3ˆÔÜ,Ó.ˆ�rL   c                 óþ  ‡‡‡— dŠt        ‰‰«      \  | _        Š| j                  Š‰t        j                  z  rdnd}t	        |   ‰‰‰|z    «      }‰|z  Š|j
                  |   | _        ‰t        j                  z  rt        ‰‰«      \  | _        Š‰t        j                  z  rt        ‰‰«      \  | _
        Šnd | _
        | j                  €d}n'|d   j                  | j                     }t        |«      }‰t        j                  z  r2t        j                  |‰‰«      \  }Št        d„ |D «       «      | _        nd| _        t        | j                   «      |k(  sJ ‚‰t        j"                  z  rt        ‰‰«      \  | _        Šnt&        | _        ‰t        j(                  z  rt        ‰‰«      \  | _        Šnt&        | _        t-        «       | _        ˆˆˆfd„}	t0        j3                  «       D ]$  \  }
} |	|«      }t5        | j.                  |
|«       Œ& ‰t        j6                  z  s%| j.                  j8                  | j.                  _        ‰t        j<                  z  }|rt        ‰‰«      \  }Š||dz
  z  }|rŒ‰‰d  S )	Nr   rm   r+   ÚAxisIndicesListc              3   ó4   K  — | ]  }t        |d «      –— Œ y­w©é   N)Úfi2fl©Ú.0re   s     rM   ú	<genexpr>z)VarComponent.decompile.<locals>.<genexpr>Ã   s   è ø€ Ò#E°Q¤E¨!¨R§LÑ#Eùó   ‚rK   c           	      óÈ   •— ‰| j                   z  rGt        t        j                  d‰‰‰dz    «      d   | j                  «      | j
                  z  }‰dz  Š|S | j                  S )Nú>hr+   r   )rO   rœ   rb   rp   rP   rQ   rR   )Úvaluesre   r|   rŒ   r}   s     €€€rM   Úread_transform_componentz8VarComponent.decompile.<locals>.read_transform_componentÓ   sk   ø€ à�v—{‘{Ò"äÜŸ™ d¨D°°Q¸±U¨OÓ<¸QÑ?À×AVÑAVóð —l‘lñ#ð ð �Q‘�Ø�à×*Ñ*Ð*rL   r   )r   rŒ   r*   rG   Ú	_unpackerÚ
glyphOrderr�   rB   rŽ   r<   r�   ÚItemÚlenr	   ÚdecompileDeltas_Útupler�   r=   r’   r‘   r>   r“   r   r”   ÚVAR_TRANSFORM_MAPPINGÚitemsÚsetattrrD   rY   rZ   rJ   )r‰   r|   ÚfontÚ
localStateÚgidSizeÚglyphIDÚnumAxesÚaxisIndicesr�   r¤   Ú	attr_nameÚmapping_valuesÚvalueÚnÚ_rŒ   r}   s    `             @@rM   Ú	decompilezVarComponent.decompile©   sO  ú€ ØˆÜ'¨¨aÓ0‰ˆŒ
�AØ—
‘
ˆàÔ0×=Ñ=Ò=‘!À1ˆÜ˜GÑ$ T¨!¨a°'©kÐ%:Ó;ˆØ	ˆW‰ˆØŸ™¨Ñ1ˆŒàÔ$×3Ñ3Ò3Ü%4°T¸1Ó%=Ñ"ˆDÔ àÔ$×.Ñ.Ò.Ü'6°t¸QÓ'?Ñ$ˆDÔ!¡1à$(ˆDÔ!à× Ñ Ð(Ø‰Gà$Ð%6Ñ7×<Ñ<¸T×=RÑ=RÑSˆKÜ˜+Ó&ˆGàÔ$×.Ñ.Ò.Ü*×;Ñ;¸GÀTÈ1ÓM‰MˆJ˜Ü#Ñ#E¸*Ô#EÓEˆD�Oà ˆDŒOÜ�4—?‘?Ó# wÒ.Ð.Ð.àÔ$×?Ñ?Ò?Ü)8¸¸qÓ)AÑ&ˆDÔ#¡Qä&8ˆDÔ#ØÔ$×<Ñ<Ò<Ü(7¸¸aÓ(@Ñ%ˆDÔ"¡Aä%7ˆDÔ"ä,Ó.ˆŒö	+ô *?×)DÑ)DÓ)Fò 	6Ñ%ˆI�~Ù,¨^Ó<ˆEÜ�D—N‘N I¨uÕ5ð	6ð Ô)×6Ñ6Ò6Ø$(§N¡N×$9Ñ$9ˆD�N‰NÔ!àÔ%×3Ñ3Ñ3ˆÙÜ" 4¨Ó+‰DˆAˆqØ��Q‘‰JˆAò ð �A�BˆxˆrL   c                 óz  ‡— |j                   t           }g }| j                  Š|j                  | j                  «      }|dkD  r1‰t
        j                  z  Š|j                  t        d   |«      «       n1‰t
        j                   z  Š|j                  t        d   |«      «       | j                  �7‰t
        j                  z  Š|j                  t        | j                  «      «       t        | j                  «      }|r�‰t
        j                  z  Š|j                  t        | j                  «      «       |j                  t!        j"                  | j                  D �cg c]  }t%        |d«      ‘Œ c}| ¬«      «       n‰t
        j                   z  Š| j&                  t(        k7  r8‰t
        j*                  z  Š|j                  t        | j&                  «      «       n‰t
        j*                   z  Š| j,                  t(        k7  r8‰t
        j.                  z  Š|j                  t        | j,                  «      «       n‰t
        j.                   z  Šˆfd„}t0        j3                  «       D ]3  \  }}	t5        | j6                  |«      }
|j                   ||
|	«      «       Œ5 t        ‰«      t9        |«      z   S c c}w )Néÿÿ  rm   r+   r›   )ÚoptimizeSizec                 ó’   •— ‰|j                   z  r7t        j                  dt        | |j                  z  |j
                  «      «      S y)Nr¢   rL   )rO   rb   rc   Úfl2firQ   rP   )r¶   r£   rŒ   s     €rM   Úwrite_transform_componentz7VarComponent.compile.<locals>.write_transform_component  s@   ø€ Ø�v—{‘{Ò"Ü—{‘{Øœ% ¨¯©Ñ 4°f×6KÑ6KÓLóð ð rL   )Úcfgr   rŒ   Ú
getGlyphIDr�   r*   rG   ÚappendÚ_packerrŽ   rB   r‚   r¨   r�   r<   r�   r	   ÚcompileDeltaValues_r¾   r’   r‘   r=   r“   r>   r«   r¬   Úgetattrr”   r   )r‰   r®   ÚoptimizeSpeedr|   r±   r²   re   r¿   r´   rµ   r¶   rŒ   s              @rM   ÚcompilezVarComponent.compileï   sB  ø€ ØŸ™Ô!4Ñ5ˆàˆà—
‘
ˆà—/‘/ $§.¡.Ó1ˆØ�UŠ?ØÔ&×3Ñ3Ñ3ˆEØ�K‰Kœ ™
 7Ó+Õ,àÔ'×4Ñ4Ð4Ñ4ˆEØ�K‰Kœ ™
 7Ó+Ô,à×ÑÐ*ØÔ&×5Ñ5Ñ5ˆEØ�K‰KÔ(¨×)<Ñ)<Ó=Ô>ä�d—o‘oÓ&ˆáØÔ&×0Ñ0Ñ0ˆEØ�K‰KÔ(¨×)>Ñ)>Ó?Ô@Ø�K‰KÜ×2Ñ2Ø+/¯?©?Ö; a”U˜1˜b•\Ò;Ø%2Ð!2ôõð Ô'×1Ñ1Ð1Ñ1ˆEà×"Ñ"Ô&8Ò8ØÔ&×AÑAÑAˆEØ�K‰KÔ(¨×)@Ñ)@ÓAÕBàÔ'×BÑBÐBÑBˆEØ×!Ñ!Ô%7Ò7ØÔ&×>Ñ>Ñ>ˆEØ�K‰KÔ(¨×)?Ñ)?Ó@ÕAàÔ'×?Ñ?Ð?Ñ?ˆEô	ô *?×)DÑ)DÓ)Fò 	JÑ%ˆI�~Ü˜DŸN™N¨IÓ6ˆEØ�K‰KÑ1°%¸ÓHÕIð	Jô   Ó&¬°4«Ñ8Ð8ùò= <s   ÅJ8c                 ó®  ‡— ‰j                  d|«       ‰j                  «        dˆfd„	} |d| j                  «       | j                  � |d| j                  «       | j                  � |d| j                  «       | j                  €| j
                  t        j                  z  rW| j
                  t        j                  z  rd}nd} |d| j                  D �cg c]  }t        t        |d	«      «      ‘Œ c}|«       | j                  t        k7  r |d
| j                  «       | j                  t        k7  r |d| j                  «       t        j                  «       D ]R  \  }}| j
                  |j                   z  sŒ t#        | j$                  |«      } ||t        ||j&                  «      «       ŒT ‰j)                  d«       ‰j                  «        y c c}w )Nr„   rK   c                 ó\   •— |�)‰j                  | d|ff|z   «       ‰j                  «        y y )Nr¶   )Ú	simpletagÚnewline)Únamer¶   ÚattrsÚwriters      €rM   Úwritez!VarComponent.toXML.<locals>.write-  s5   ø€ ØÐ Ø× Ñ  ¨°%Ð(8Ð':¸UÑ'BÔCØ—‘Õ ð !rL   r�   rŽ   r�   ))ÚresetUnspecifiedAxesr   r�   r›   r’   r“   )rK   )ÚbegintagrË   r�   rŽ   r�   rŒ   r*   r;   r�   ÚfloatÚfl2strr’   r‘   r“   r«   r¬   rO   rÅ   r”   rP   Úendtag)r‰   rÎ   ÚttFontrÍ   rÏ   re   r´   Úmappings    `      rM   ÚtoXMLzVarComponent.toXML)  s†  ø€ Ø�‰˜¨Ô.Ø�‰Ôõ	!ñ
 	ˆk˜4Ÿ>™>Ô*à×ÑÐ*ÙÐ" D×$7Ñ$7Ô8Ø× Ñ Ð,ÙÐ$ d×&;Ñ&;Ô<à×!Ñ!Ð-Ø�z‰zÔ-×DÑDÒDà�z‰zÔ-×DÑDÒDØ6‘à�Ù�,¸t¿¹Ö O¸!¤¤v¨a°£}Õ!5Ò OÐQVÔWà×"Ñ"Ô&8Ò8ÙÐ&¨×(?Ñ(?Ô@Ø×!Ñ!Ô%7Ò7ÙÐ% t×'=Ñ'=Ô>ô #8×"=Ñ"=Ó"?ò 	@ÑˆI�wØ—J‘J §¡Ò-ØÜ˜Ÿ™¨	Ó2ˆAÙ�)œV A w×'=Ñ'=Ó>Õ?ð		@ð 	�‰�nÔ%Ø�‰Õùò! !Ps   ÃG
c                 óØ  — |D �cg c]  }t        |t        «      sŒ|‘Œ }}| j                  «        |D �]/  \  }}}|rJ ‚|d   }|dk(  r|| _        Œ|dk(  rt	        |«      | _        Œ4|dk(  rt	        |«      | _        ŒJ|dk(  r`t        d„ t	        |«      D «       «      | _        t	        |j                  dd«      «      sŒ‹| xj                  t        j                  z  c_	        Œ¯|d	k(  rt	        |«      | _        ŒÅ|d
k(  rt	        |«      | _        ŒÛ|t        v rHt        | j                   |t	        |«      «       | xj                  t        |   j"                  z  c_	        �Œ+J |«       ‚ y c c}w )Nr¶   r�   rŽ   r�   r�   c              3   ó4   K  — | ]  }t        |d «      –— Œ y­wrš   )Ústr2flr�   s     rM   rŸ   z'VarComponent.fromXML.<locals>.<genexpr>b  s   è ø€ Ò'K¸!¬¨q°"¯Ñ'Kùr    rÐ   Ú0r’   r“   )Ú
isinstancerª   r‡   r�   r   rŽ   r�   r�   ÚgetrŒ   r*   r;   r’   r“   r«   r­   r”   rO   )r‰   rÌ   rÍ   ÚcontentrÕ   Úcre   s          rM   ÚfromXMLzVarComponent.fromXMLR  sH  € Ø%Ö>˜¬°A´uÕ)=’1Ð>ˆÐ>à×ÑÔà$+ó 	#Ñ ˆD�%˜ÙÐ�;Ø�g‘ˆAà�{Ò"Ø!"�•ØÐ)Ò)Ü&.¨q£k�Õ#ØÐ+Ò+Ü(0°«�Õ%Ø˜Ò%Ü"'Ñ'K¼xÈ»{Ô'KÓ"K�”Ü˜EŸI™IÐ&<¸cÓBÕCØ—J’JÔ"3×"JÑ"JÑJ–JØÐ-Ò-Ü*2°1«+�Õ'ØÐ,Ò,Ü)1°!«�Õ&ØÔ.Ñ.ÜØ—N‘NØÜ˜Q“Kôð
 —
’
Ô3°DÑ9×>Ñ>Ñ>—
à"˜dÓ"�uñ5	#ùò	 ?s
   …E'›E'c           	      ó„  ‡ ‡‡— dŠˆˆˆ fd„}t         j                  «       D ];  \  }} ||«      }t        ‰ j                  |t	        ‰ j                  |«      |z   «       Œ= ‰ j
                  t        j                  z  s%‰ j                  j                  ‰ j                  _	        ‰t        ‰«      k(  sJ ‰t        ‰«      f«       ‚y )Nr   c                 ó’   •— ‰j                   | j                  z  r-t        ‰‰   | j                  «      | j                  z  }‰dz  Š|S y)Nr   r   )rŒ   rO   rœ   rP   rQ   )r£   re   Údeltasr}   r‰   s     €€€rM   Úread_transform_component_deltazIVarComponent.applyTransformDeltas.<locals>.read_transform_component_deltav  sC   ø€ à�z‰z˜FŸK™KÒ'Ü˜& ™) V×%:Ñ%:Ó;¸f¿l¹lÑJ�Ø�Q‘�Ø�àrL   )r«   r¬   r­   r”   rÅ   rŒ   r*   rD   rY   rZ   r¨   )r‰   rã   rä   r´   rµ   r¶   r}   s   ``    @rM   ÚapplyTransformDeltasz!VarComponent.applyTransformDeltass  s¥   ú€ Øˆö	ô *?×)DÑ)DÓ)Fò 	Ñ%ˆI�~Ù2°>ÓBˆEÜØ—‘ 	¬7°4·>±>À9Ó+MÐPUÑ+Uõð	ð —
‘
Ô.×;Ñ;Ò;Ø$(§N¡N×$9Ñ$9ˆD�N‰NÔ!à”C˜“KÒÐ1 !¤S¨£[Ð!1Ó1ÑrL   c                 ón   — t        | «      t        |«      k7  rt        S | j                  |j                  k(  S r†   )ÚtypeÚNotImplementedÚ__dict__)r‰   Úothers     rM   Ú__eq__zVarComponent.__eq__Š  s+   € Ü�‹:œ˜e›Ò$Ü!Ð!Ø�}‰} §¡Ñ.Ð.rL   c                 ó>   — | j                  |«      }|t        u r|S | S r†   )rë   rè   )r‰   rê   Úresults      rM   Ú__ne__zVarComponent.__ne__�  s$   € Ø—‘˜UÓ#ˆØ¤>Ñ1ˆvÐA¸6°zÐArL   r†   )r8   r9   r:   rŠ   r‡   r¹   rÇ   r×   rà   rå   rë   rî   rK   rL   rM   r„   r„   ›   s5   „ ò ó/òDòL89òt'òR#òB2ò./ó
BrL   r„   c                   ó,   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zy)ÚVarCompositeGlyphNc                 ó&   — |�|| _         y g | _         y r†   ©Ú
components)r‰   ró   s     rM   rŠ   zVarCompositeGlyph.__init__•  s   € Ø(2Ð(>˜*ˆ�ÀBˆ�rL   c                 óŽ   — g | _         |r<t        «       }|j                  |||«      }| j                   j                  |«       |rŒ;y y r†   )ró   r„   r¹   rÂ   )r‰   r|   r®   r¯   Ú	components        rM   r¹   zVarCompositeGlyph.decompile˜  s>   € ØˆŒÙÜ$›ˆIØ×&Ñ& t¨T°:Ó>ˆDØ�O‰O×"Ñ" 9Ô-ô rL   c                 ó~   — g }| j                   D ]"  }|j                  |j                  |«      «       Œ$ t        |«      S r†   )ró   rÂ   rÇ   r   )r‰   r®   r|   rõ   s       rM   rÇ   zVarCompositeGlyph.compileŸ  s;   € ØˆØŸ™ò 	1ˆIØ�K‰K˜	×)Ñ)¨$Ó/Õ0ð	1ä˜‹ÐrL   c                 óð   — |j                  d|«       |j                  «        t        | j                  «      D ]  \  }}|j	                  ||d|fg«       Œ |j                  d«       |j                  «        y )Nrð   Úindex)rÑ   rË   Ú	enumerateró   r×   rÔ   )r‰   Ú	xmlWriterr®   rÍ   rÌ   r}   rõ   s          rM   r×   zVarCompositeGlyph.toXML¥  sl   € Ø×ÑÐ.°Ô6Ø×ÑÔÜ% d§o¡oÓ6ò 	=‰LˆAˆyØ�O‰O˜I t¨w¸¨l¨^Õ<ð	=à×ÑÐ,Ô-Ø×ÑÕrL   c                 óä   — |D �cg c]  }t        |t        «      sŒ|‘Œ }}|D ]F  \  }}}|dk(  sJ ‚t        «       }|j                  ||||«       | j                  j                  |«       ŒH y c c}w )Nr„   )rÜ   rª   r„   rà   ró   rÂ   )r‰   rÌ   rÍ   rÞ   r®   rß   rõ   s          rM   rà   zVarCompositeGlyph.fromXML­  st   € Ø%Ö>˜¬°A´uÕ)=’1Ð>ˆÐ>Ø$+ò 	.Ñ ˆD�%˜Ø˜>Ò)Ð)Ð)Ü$›ˆIØ×Ñ˜d E¨7°DÔ9Ø�O‰O×"Ñ" 9Õ-ñ		.ùò ?s
   …A-›A-r†   )r8   r9   r:   rŠ   r¹   rÇ   r×   rà   rK   rL   rM   rð   rð   ”  s   „ óGò.òòó.rL   rð   c                   ó   — e Zd Zd„ Zy)ÚAATStateTablec                 ó.   — i | _         g | _        g | _        y r†   )ÚGlyphClassesÚStatesÚPerGlyphLookupsrˆ   s    rM   rŠ   zAATStateTable.__init__·  s   € ØˆÔØˆŒØ!ˆÕrL   N©r8   r9   r:   rŠ   rK   rL   rM   rý   rý   ¶  s   „ ó"rL   rý   c                   ó   — e Zd Zd„ Zy)ÚAATStatec                 ó   — i | _         y r†   )ÚTransitionsrˆ   s    rM   rŠ   zAATState.__init__¾  s
   € ØˆÕrL   Nr  rK   rL   rM   r  r  ½  s   „ órL   r  c                   ó,   — e Zd ZdZed„ «       Zd„ Zd„ Zy)Ú	AATActionNc                  ó   — y)N©NNrK   )r®   Ústatess     rM   ÚcompileActionszAATAction.compileActionsÅ  s   € àrL   c                 óH  — | j                   D �cg c]  }| j                  |   sŒ|‘Œ }}|r2|j                  ddj                  |«      ¬«       |j	                  «        | j
                  dk7  r1|j                  dd| j
                  z  ¬«       |j	                  «        y y c c}w )NÚFlagsú,©r¶   r   ÚReservedFlagsz0x%04X)Ú_FLAGSré   rÊ   ÚjoinrË   r  )r‰   rú   ÚfrŒ   s       rM   Ú_writeFlagsToXMLzAATAction._writeFlagsToXMLÉ  s�   € Ø ŸK™KÖ<�q¨4¯=©=¸Ó+;’Ð<ˆÐ<ÙØ×Ñ ¨s¯x©x¸«ÐÔ?Ø×ÑÔØ×Ñ Ò"Ø×Ñ °xÀ$×BTÑBTÑ7TÐÔUØ×ÑÕð #ùò	 =s
   �B¤Bc                 óR   — || j                   v s
J d|z  «       ‚d| j                  |<   y )Nzunsupported flag %sT)r  ré   ©r‰   rO   s     rM   Ú_setFlagzAATAction._setFlagÒ  s-   € Ø�t—{‘{Ñ"Ð@Ð$9¸DÑ$@Ó@Ð"Ø"ˆ�‰�dÒrL   )r8   r9   r:   r  Ústaticmethodr  r  r  rK   rL   rM   r  r  Â  s#   „ Ø€Fàñó ðò ó#rL   r  c                   óž   — e Zd ZdZdZg d¢Zi dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“Zd"„ Zd#„ Zd$„ Z	d%„ Z
d&„ Zy')(ÚRearrangementMorphActionr,   r   )Ú	MarkFirstÚDontAdvanceÚMarkLastz	no changer   u	   Ax â‡’ xAr+   u	   xD â‡’ Dxrm   u   AxD â‡’ DxAu   ABx â‡’ xABr{   u   ABx â‡’ xBAé   u   xCD â‡’ CDxé   u   xCD â‡’ DCxr-   u   AxCD â‡’ CDxAé	   u   AxCD â‡’ DCxArU   u   ABxD â‡’ DxABé   u   ABxD â‡’ DxBArS   u   ABxCD â‡’ CDxABé   u   ABxCD â‡’ CDxBAr›   u   ABxCD â‡’ DCxABé   u   ABxCD â‡’ DCxBAc                 óX   — d| _         d| _        d| _        d| _        d| _        d| _        y ©Nr   F)ÚNewStateÚVerbr  r  r  r  rˆ   s    rM   rŠ   z!RearrangementMorphAction.__init__ï  s.   € ØˆŒØˆŒ	ØˆŒØ ˆÔØˆŒØˆÕrL   c                 óZ  — |�J ‚|j                  | j                  «       | j                  dk\  r| j                  dk  sJ | j                  «       ‚| j                  | j                  z  }| j                  r|dz  }| j
                  r|dz  }| j                  r|dz  }|j                  |«       y )Nr   r$  r�   r7   r6   )ÚwriteUShortr'  r(  r  r  r  r  ©r‰   rÎ   r®   ÚactionIndexrŒ   s        rM   rÇ   z RearrangementMorphAction.compile÷  s˜   € ØÐ"Ð"Ð"Ø×Ñ˜4Ÿ=™=Ô)Ø�y‰y˜AŠ~ $§)¡)¨r¢/Ð<°4·9±9Ó<Ð1Ø—	‘	˜D×.Ñ.Ñ.ˆØ�>Š>Ø�V‰OˆEØ×ÒØ�V‰OˆEØ�=Š=Ø�V‰OˆEØ×Ñ˜5Õ!rL   c                 óð   — |�J ‚|j                  «       | _        |j                  «       }|dz  | _        t        |dz  «      | _        t        |dz  «      | _        t        |dz  «      | _        |dz  | _        y )Nr$  r�   r7   r6   ið  )Ú
readUShortr'  r(  Úboolr  r  r  r  ©r‰   Úreaderr®   ÚactionReaderrŒ   s        rM   r¹   z"RearrangementMorphAction.decompile  st   € ØÐ#Ð#Ð#Ø×)Ñ)Ó+ˆŒØ×!Ñ!Ó#ˆØ˜C‘KˆŒ	Ü˜e f™nÓ-ˆŒÜ ¨¡Ó/ˆÔÜ˜U V™^Ó,ˆŒØ" V™^ˆÕrL   c                 óÒ  —  |j                   |fi |¤Ž |j                  «        |j                  d| j                  ¬«       |j                  «        | j	                  |«       |j                  d| j
                  ¬«       | j                  j                  | j
                  «      }|�|j                  |«       |j                  «        |j                  |«       |j                  «        y )Nr'  r  r(  )
rÑ   rË   rÊ   r'  r  r(  Ú_VERBSrÝ   ÚcommentrÔ   )r‰   rú   r®   rÍ   rÌ   ÚverbComments         rM   r×   zRearrangementMorphAction.toXML  s»   € Øˆ	×Ñ˜4Ñ) 5Ò)Ø×ÑÔØ×Ñ˜J¨d¯m©mÐÔ<Ø×ÑÔØ×Ñ˜iÔ(Ø×Ñ˜F¨$¯)©)ÐÔ4Ø—k‘k—o‘o d§i¡iÓ0ˆØÐ"Ø×Ñ˜kÔ*Ø×ÑÔØ×Ñ˜ÔØ×ÑÕrL   c                 óÊ  — dx| _         x| _        | _        dx| _        x| _        | _        |D �cg c]  }t        |t        «      sŒ|‘Œ }}|D ]�  \  }}}|dk(  rt        |d   «      | _         Œ |dk(  rt        |d   «      | _        Œ9|dk(  rt        |d   «      | _        ŒR|dk(  sŒX|d   j                  d«      D ]!  }	| j                  |	j                  «       «       Œ# Œ‘ y c c}w )	Nr   Fr'  r¶   r(  r  r  r  )r'  r(  r  r  r  r  rÜ   rª   r   Úsplitr  Ústrip©
r‰   rÌ   rÍ   rÞ   r®   ÚtÚeltNameÚeltAttrsÚ
eltContentrO   s
             rM   rà   z RearrangementMorphAction.fromXML  sê   € Ø9:Ð:ˆŒÐ:˜œ	 DÔ$6Ø<AÐAˆŒÐA˜Ô)¨D¬MØ%Ö>˜¬°A´uÕ)=’1Ð>ˆÐ>Ø-4ò 		0Ñ)ˆG�X˜zØ˜*Ò$Ü (¨°'Ñ):Ó ;�•Ø˜FÒ"Ü$ X¨gÑ%6Ó7�•	Ø˜OÒ+Ü%-¨h°wÑ.?Ó%@�Õ"Ø˜GÓ#Ø$ WÑ-×3Ñ3°CÓ8ò 0�DØ—M‘M $§*¡*£,Õ/ñ0ñ		0ùò ?s   ¯C ÁC N)r8   r9   r:   Ú
staticSizeÚactionHeaderSizer  r4  rŠ   rÇ   r¹   r×   rà   rK   rL   rM   r  r  ×  sò   „ Ø€JØÐÚ5€FðØ	ˆ;ðà	ˆ;ðð 	
ˆ;ðð 	
ˆ=ð	ð
 	
ˆ=ðð 	
ˆ=ðð 	
ˆ=ðð 	
ˆ=ðð 	
ˆ?ðð 	
ˆ?ðð 	ˆOðð 	ˆOðð 	Ððð 	Ððð 	Ððð  	Ðð!€Fò&ò"ò,òó0rL   r  c                   ó:   — e Zd ZdZdZddgZd„ Zd„ Zd„ Zd„ Z	d	„ Z
y
)ÚContextualMorphActionr-   r   ÚSetMarkr  c                 ó\   — d| _         d\  | _        | _        d| _        d\  | _        | _        y )Nr   ©FF©r»   r»   )r'  rC  r  r  Ú	MarkIndexÚCurrentIndexrˆ   s    rM   rŠ   zContextualMorphAction.__init__1  s/   € ØˆŒØ)5Ñ&ˆŒ�dÔ&ØˆÔØ,:Ñ)ˆŒ˜Õ)rL   c                 ó,  — |�J ‚|j                  | j                  «       | j                  }| j                  r|dz  }| j                  r|dz  }|j                  |«       |j                  | j
                  «       |j                  | j                  «       y )Nr�   r7   )r*  r'  r  rC  r  rG  rH  r+  s        rM   rÇ   zContextualMorphAction.compile7  s�   € ØÐ"Ð"Ð"Ø×Ñ˜4Ÿ=™=Ô)Ø×"Ñ"ˆØ�<Š<Ø�V‰OˆEØ×ÒØ�V‰OˆEØ×Ñ˜5Ô!Ø×Ñ˜4Ÿ>™>Ô*Ø×Ñ˜4×,Ñ,Õ-rL   c                 ó
  — |�J ‚|j                  «       | _        |j                  «       }t        |dz  «      | _        t        |dz  «      | _        |dz  | _        |j                  «       | _        |j                  «       | _        y )Nr�   r7   iÿ?  )r.  r'  r/  rC  r  r  rG  rH  r0  s        rM   r¹   zContextualMorphAction.decompileC  sz   € ØÐ#Ð#Ð#Ø×)Ñ)Ó+ˆŒØ×!Ñ!Ó#ˆÜ˜E F™NÓ+ˆŒÜ ¨¡Ó/ˆÔØ" V™^ˆÔØ×*Ñ*Ó,ˆŒØ"×-Ñ-Ó/ˆÕrL   c                 ó¼  —  |j                   |fi |¤Ž |j                  «        |j                  d| j                  ¬«       |j                  «        | j	                  |«       |j                  d| j
                  ¬«       |j                  «        |j                  d| j                  ¬«       |j                  «        |j                  |«       |j                  «        y )Nr'  r  rG  rH  )rÑ   rË   rÊ   r'  r  rG  rH  rÔ   ©r‰   rú   r®   rÍ   rÌ   s        rM   r×   zContextualMorphAction.toXMLM  s¶   € Øˆ	×Ñ˜4Ñ) 5Ò)Ø×ÑÔØ×Ñ˜J¨d¯m©mÐÔ<Ø×ÑÔØ×Ñ˜iÔ(Ø×Ñ˜K¨t¯~©~ÐÔ>Ø×ÑÔØ×Ñ˜N°$×2CÑ2CÐÔDØ×ÑÔØ×Ñ˜ÔØ×ÑÕrL   c                 óþ  — dx| _         | _        dx| _        | _        d\  | _        | _        |D �cg c]  }t        |t        «      sŒ|‘Œ }}|D ]¨  \  }}}|dk(  rt        |d   «      | _         Œ |dk(  r9|d   j                  d«      D ]!  }	| j                  |	j                  «       «       Œ# Œ^|dk(  rt        |d   «      | _        Œw|d	k(  rt        |d   «      | _        Œ�|d
k(  sŒ–t        |d   «      | _        Œª y c c}w )Nr   FrF  r'  r¶   r  r  r  rG  rH  )r'  r  rC  r  rG  rH  rÜ   rª   r   r8  r  r9  r:  s
             rM   rà   zContextualMorphAction.fromXMLZ  s  € Ø-.Ð.ˆŒ˜Ô*Ø*/Ð/ˆŒ�tÔ'Ø,:Ñ)ˆŒ˜Ô)Ø%Ö>˜¬°A´uÕ)=’1Ð>ˆÐ>Ø-4ò 	@Ñ)ˆG�X˜zØ˜*Ò$Ü (¨°'Ñ):Ó ;�•Ø˜GÒ#Ø$ WÑ-×3Ñ3°CÓ8ò 0�DØ—M‘M $§*¡*£,Õ/ñ0à˜OÒ+Ü%-¨h°wÑ.?Ó%@�Õ"Ø˜KÒ'Ü!)¨(°7Ñ*;Ó!<�•Ø˜NÓ*Ü$,¨X°gÑ->Ó$?�Õ!ñ	@ùò ?s   °C:ÁC:N)r8   r9   r:   r?  r@  r  rŠ   rÇ   r¹   r×   rà   rK   rL   rM   rB  rB  ,  s1   „ Ø€JØÐØ˜Ð'€Fò;ò
.ò0òó@rL   rB  c                   ó   — e Zd Zd„ Zy)Ú	LigActionc                 ó    — d| _         d| _        y )NFr   )ÚStoreÚGlyphIndexDeltarˆ   s    rM   rŠ   zLigAction.__init__n  s   € ØˆŒ
ð  !ˆÕrL   Nr  rK   rL   rM   rO  rO  m  s   „ ó!rL   rO  c                   óV   — e Zd ZdZdZddgZd„ Zd„ Zd„ Ze	d„ «       Z
d	„ Zd
„ Zd„ Zd„ Zy)ÚLigatureMorphActionr  rS   ÚSetComponentr  c                 óL   — d| _         d\  | _        | _        d| _        g | _        y )Nr   rE  )r'  rU  r  r  ÚActionsrˆ   s    rM   rŠ   zLigatureMorphAction.__init__„  s(   € ØˆŒØ.:Ñ+ˆÔ˜4Ô+ØˆÔØˆ�rL   c                 ó–  — |€J ‚|j                  | j                  «       | j                  }| j                  r|dz  }| j                  r|dz  }t        | j                  «      dkD  r|dz  }|j                  |«       t        | j                  «      dkD  r%| j                  «       }|j                  ||   «       y |j                  d«       y )Nr�   r7   r   r6   )r*  r'  r  rU  r  r¨   rW  ÚcompileLigActions)r‰   rÎ   r®   r,  rŒ   Úactionss         rM   rÇ   zLigatureMorphAction.compileŠ  s·   € ØÐ&Ð&Ð&Ø×Ñ˜4Ÿ=™=Ô)Ø×"Ñ"ˆØ×ÒØ�V‰OˆEØ×ÒØ�V‰OˆEÜˆt�|‰|Ó˜qÒ Ø�V‰OˆEØ×Ñ˜5Ô!Üˆt�|‰|Ó˜qÒ Ø×,Ñ,Ó.ˆGØ×Ñ˜{¨7Ñ3Õ4à×Ñ˜qÕ!rL   c                 ó4  — |€J ‚|j                  «       | _        |j                  «       }t        |dz  «      | _        t        |dz  «      | _        t        |dz  «      }|dz  | _        |j                  «       }|r| j                  ||«      | _        y g | _        y )Nr�   r7   r6   iÿ  )r.  r'  r/  rU  r  r  Ú_decompileLigActionsrW  )r‰   r1  r®   r2  rŒ   ÚperformActionr,  s          rM   r¹   zLigatureMorphAction.decompile›  s–   € ØÐ'Ð'Ð'Ø×)Ñ)Ó+ˆŒØ×!Ñ!Ó#ˆÜ  ¨¡Ó0ˆÔÜ ¨¡Ó/ˆÔÜ˜U V™^Ó,ˆð # V™^ˆÔØ×'Ñ'Ó)ˆÙØ×4Ñ4°\À;ÓOˆD�LàˆD�LrL   c                 óŽ  — dt        «       i }}}|D ]C  }|j                  j                  «       D ]$  \  }}|j                  |j	                  «       «       Œ& ŒE t        |d„ ¬«      D ]O  }||vsŒt        dt        |«      d«      D ]*  }	||	d  }
t        |«      |	z   dz  }|j                  |
|«       Œ, ||z  }ŒQ t        |d«      }||fS )NrL   c                 ó   — t        | «       | fS r†   ©r¨   ©Úxs    rM   rf   z4LigatureMorphAction.compileActions.<locals>.<lambda>¿  s   € ´°Q³°¸¨|€ rL   ©Úkeyr   r,   )
Úsetr  r¬   ÚaddrY  ÚsortedÚranger¨   Ú
setdefaultr   )r®   r  rí   rZ  r,  ÚstateÚ_glyphClassÚtransÚar}   ÚsuffixÚsuffixIndexs               rM   r  z"LigatureMorphAction.compileActions®  sç   € à'*¬C«E°2˜�ˆØò 	7ˆEØ&+×&7Ñ&7×&=Ñ&=Ó&?ò 7Ñ"�˜UØ—‘˜E×3Ñ3Ó5Õ6ñ7ð	7ô ˜Ñ%;Ô<ò 	ˆAØ˜Ò#Ü˜q¤# a£&¨!Ó,ò @�AØ˜q˜r˜U�FÜ#& v£;°¡?°qÑ"8�KØ×*Ñ*¨6°;Õ?ð@ð ˜!‘‘ð	ô �V˜Q“ˆØ˜Ð$Ð$rL   c                 ó,  — g }t        | j                  «      D ]p  \  }}|t        | j                  «      dz
  k(  }|j                  dz  }||rdndz  }||j                  rdndz  }|j                  t        j                  d|«      «       Œr t        |«      S )Nr   éÿÿÿ?ì        r   é   @rk   )	rù   rW  r¨   rR  rQ  rÂ   rb   rc   r   )r‰   rí   r}   ÚactionÚlastr¶   s         rM   rY  z%LigatureMorphAction.compileLigActionsÉ  s�   € ØˆÜ" 4§<¡<Ó0ò 	4‰IˆAˆvØœ˜DŸL™LÓ)¨AÑ-Ñ-ˆDØ×*Ñ*¨ZÑ7ˆEØ¡4‘Z¨QÑ.ˆEØ 6§<¢<‘Z°QÑ6ˆEØ�M‰Mœ&Ÿ+™+ d¨EÓ2Õ3ð	4ô ˜Ó Ð rL   c                 ó  — g }d}|j                  |j                  |dz  z   «      }|se|j                  «       }t        |dz  «      }t	        «       }|j                  |«       t        |dz  «      |_        |dz  }|dk\  rd|z   }||_        |sŒe|S )NFr,   rr  rs  rq  i    i   À)ÚgetSubReaderÚposÚ	readULongr/  rO  rÂ   rQ  rR  )	r‰   r2  r,  rZ  ru  r1  r¶   rt  Údeltas	            rM   r\  z(LigatureMorphAction._decompileLigActionsÓ  sŸ   € ØˆØˆØ×*Ñ*¨<×+;Ñ+;¸kÈA¹oÑ+MÓNˆÙØ×$Ñ$Ó&ˆEÜ˜ 
Ñ*Ó+ˆDÜ“[ˆFØ�N‰N˜6Ô"Ü ¨
Ñ 2Ó3ˆFŒLØ˜JÑ&ˆEØ˜
Ò"Ø# eÑ+�Ø%*ˆFÔ"ò ð ˆrL   c                 ó¬  — dx| _         | _        dx| _        | _        d| _        g | _        |D �cg c]  }t        |t        «      sŒ|‘Œ }}|D ]û  \  }}}|dk(  rt        |d   «      | _         Œ |dk(  r9|d   j                  d«      D ]!  }	| j                  |	j                  «       «       Œ# Œ^|dk(  rt        |d   «      | _        Œw|dk(  sŒ}t        «       }
|j                  dd	«      j                  d«      }|D �cg c]  }|j                  «       ‘Œ }}d
|v |
_        t        |d   «      |
_        | j                  j                  |
«       Œý y c c}w c c}w )Nr   Fr'  r¶   r  r  r  ÚActionÚ rQ  rR  )r'  r  rU  r  rW  rÜ   rª   r   r8  r  r9  rO  rÝ   rQ  rR  rÂ   )r‰   rÌ   rÍ   rÞ   r®   r;  r<  r=  r>  rO   rt  rŒ   r  s                rM   rà   zLigatureMorphAction.fromXMLã  sL  € Ø-.Ð.ˆŒ˜Ô*Ø/4Ð4ˆÔ˜DÔ,ØˆÔØˆŒØ%Ö>˜¬°A´uÕ)=’1Ð>ˆÐ>Ø-4ò 	,Ñ)ˆG�X˜zØ˜*Ò$Ü (¨°'Ñ):Ó ;�•Ø˜GÒ#Ø$ WÑ-×3Ñ3°CÓ8ò 0�DØ—M‘M $§*¡*£,Õ/ñ0à˜OÒ+Ü%-¨h°wÑ.?Ó%@�Õ"Ø˜HÓ$Ü"›�Ø Ÿ™ W¨bÓ1×7Ñ7¸Ó<�Ø,1Ö2 q˜Ÿ™�Ð2�Ð2Ø&¨%Ð/�”Ü)1°(Ð;LÑ2MÓ)N�Ô&Ø—‘×#Ñ# FÕ+ñ	,ùò ?ùò 3s   ¯EÁEÃ9Ec                 óÆ  —  |j                   |fi |¤Ž |j                  «        |j                  d| j                  ¬«       |j                  «        | j	                  |«       | j
                  D ]P  }d|j                  fg}|j                  r|j                  d«       |j                  d|«       |j                  «        ŒR |j                  |«       |j                  «        y )Nr'  r  rR  )r  rQ  r|  )
rÑ   rË   rÊ   r'  r  rW  rR  rQ  rÂ   rÔ   )r‰   rú   r®   rÍ   rÌ   rt  Úattribss          rM   r×   zLigatureMorphAction.toXMLù  sÆ   € Øˆ	×Ñ˜4Ñ) 5Ò)Ø×ÑÔØ×Ñ˜J¨d¯m©mÐÔ<Ø×ÑÔØ×Ñ˜iÔ(Ø—l‘lò 	 ˆFØ)¨6×+AÑ+AÐBÐCˆGØ�|Š|Ø—‘Ð1Ô2Ø×Ñ ¨'Ô2Ø×ÑÕð	 ð 	×Ñ˜ÔØ×ÑÕrL   N)r8   r9   r:   r?  r@  r  rŠ   rÇ   r¹   r  r  rY  r\  rà   r×   rK   rL   rM   rT  rT  |  sP   „ Ø€Jð Ðà˜mÐ,€Fòò"ò"ð& ñ%ó ð%ò4!òò ,ó,rL   rT  c                   óP   — e Zd ZdZdZg d¢Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zed
„ «       Zy)ÚInsertionMorphActionr-   r,   )rC  r  ÚCurrentIsKashidaLikeÚMarkedIsKashidaLikeÚCurrentInsertBeforeÚMarkedInsertBeforec                 óz   — d| _         | j                  D ]  }t        | |d«       Œ d| _        g g c| _        | _        y r&  )r'  r  r­   r  ÚCurrentInsertionActionÚMarkedInsertionActionr  s     rM   rŠ   zInsertionMorphAction.__init__  sB   € ØˆŒØ—K‘Kò 	'ˆDÜ�D˜$ Õ&ð	'àˆÔØBDÀbÐ?ˆÔ# TÕ%?rL   c                 ó¾  — |€J ‚|j                  | j                  «       | j                  }| j                  r|dz  }| j                  r|dz  }| j
                  r|dz  }| j                  r|dz  }| j                  r|dz  }| j                  r|dz  }|t        | j                  «      dz  z  }|t        | j                  «      z  }|j                  |«       t        | j                  «      dkD  r|t        | j                  «         }nd	}|j                  |«       t        | j                  «      dkD  r|t        | j                  «         }nd	}|j                  |«       y )
Nr�   r7   r6   r5   r4   r3   r{   r   r»   )r*  r'  r  rC  r  r‚  rƒ  r„  r…  r¨   r‡  rˆ  rª   )r‰   rÎ   r®   r,  rŒ   ÚcurrentIndexÚmarkedIndexs          rM   rÇ   zInsertionMorphAction.compile  sH  € ØÐ&Ð&Ð&Ø×Ñ˜4Ÿ=™=Ô)Ø×"Ñ"ˆØ�<Š<Ø�V‰OˆEØ×ÒØ�V‰OˆEØ×$Ò$Ø�V‰OˆEØ×#Ò#Ø�V‰OˆEØ×#Ò#Ø�V‰OˆEØ×"Ò"Ø�V‰OˆEØ”�T×0Ñ0Ó1°QÑ6Ñ6ˆØ”�T×/Ñ/Ó0Ñ0ˆØ×Ñ˜5Ô!Üˆt×*Ñ*Ó+¨aÒ/Ø&¤u¨T×-HÑ-HÓ'IÑJ‰Là!ˆLØ×Ñ˜<Ô(Üˆt×)Ñ)Ó*¨QÒ.Ø%¤e¨D×,FÑ,FÓ&GÑH‰Kà ˆKØ×Ñ˜;Õ'rL   c                 óì  — |€J ‚|j                  «       | _        |j                  «       }t        |dz  «      | _        t        |dz  «      | _        t        |dz  «      | _        t        |dz  «      | _        t        |dz  «      | _        t        |dz  «      | _        | j                  |||j                  «       |dz  dz	  ¬	«      | _
        | j                  |||j                  «       |d
z  ¬	«      | _        y )Nr�   r7   r6   r5   r4   r3   ià  r{   )rø   Úcounté   )r.  r'  r/  rC  r  r‚  rƒ  r„  r…  Ú_decompileInsertionActionr‡  rˆ  r0  s        rM   r¹   zInsertionMorphAction.decompile:  s÷   € ØÐ'Ð'Ð'Ø×)Ñ)Ó+ˆŒØ×!Ñ!Ó#ˆÜ˜E F™NÓ+ˆŒÜ ¨¡Ó/ˆÔÜ$(¨°©Ó$8ˆÔ!Ü#'¨°©Ó#7ˆÔ Ü#'¨°©Ó#7ˆÔ Ü"& u¨v¡~Ó"6ˆÔØ&*×&DÑ&DØ˜$ f×&7Ñ&7Ó&9À5È6Á>ÐVWÑBWð 'Eó '
ˆÔ#ð &*×%CÑ%CØ˜$ f×&7Ñ&7Ó&9À%È&Á.ð &Dó &
ˆÕ"rL   c                 óœ   — |dk(  s|dk(  rg S |j                  |j                  |dz  z   «      }|j                  |j                  |«      «      S )Nr»   r   r+   )rw  rx  ÚgetGlyphNameManyÚreadUShortArray)r‰   r2  r®   rø   r�  r1  s         rM   r�  z.InsertionMorphAction._decompileInsertionActionK  sO   € Ø�FŠ?˜e qšjØˆIØ×*Ñ*¨<×+;Ñ+;¸eÀa¹iÑ+GÓHˆØ×$Ñ$ V×%;Ñ%;¸EÓ%BÓCÐCrL   c                 óØ  —  |j                   |fi |¤Ž |j                  «        |j                  d| j                  ¬«       |j                  «        | j	                  |«       | j
                  D ]%  }|j                  d|¬«       |j                  «        Œ' | j                  D ]%  }|j                  d|¬«       |j                  «        Œ' |j                  |«       |j                  «        y )Nr'  r  r‡  ©Úglyphrˆ  )rÑ   rË   rÊ   r'  r  r‡  rˆ  rÔ   )r‰   rú   r®   rÍ   rÌ   Úgs         rM   r×   zInsertionMorphAction.toXMLQ  sÜ   € Øˆ	×Ñ˜4Ñ) 5Ò)Ø×ÑÔØ×Ñ˜J¨d¯m©mÐÔ<Ø×ÑÔØ×Ñ˜iÔ(Ø×,Ñ,ò 	 ˆAØ×ÑÐ 8ÀÐÔBØ×ÑÕð	 ð ×+Ñ+ò 	 ˆAØ×ÑÐ 7¸qÐÔAØ×ÑÕð	 ð 	×Ñ˜ÔØ×ÑÕrL   c                 óÎ  — | j                  «        |D �cg c]  }t        |t        «      sŒ|‘Œ }}|D ]«  \  }}}|dk(  rt        |d   «      | _        Œ |dk(  r9|d   j                  d«      D ]!  }	| j                  |	j                  «       «       Œ# Œ^|dk(  r| j                  j                  |d   «       Œ‚|dk(  r| j                  j                  |d   «       Œ¦J |«       ‚ y c c}w )Nr'  r¶   r  r  r‡  r•  rˆ  )rŠ   rÜ   rª   r   r'  r8  r  r9  r‡  rÂ   rˆ  r:  s
             rM   rà   zInsertionMorphAction.fromXML`  sâ   € Ø�‰ŒØ%Ö>˜¬°A´uÕ)=’1Ð>ˆÐ>Ø-4ò 	&Ñ)ˆG�X˜zØ˜*Ò$Ü (¨°'Ñ):Ó ;�•Ø˜GÒ#Ø$ WÑ-×3Ñ3°CÓ8ò 0�DØ—M‘M $§*¡*£,Õ/ñ0àÐ4Ò4Ø×+Ñ+×2Ñ2°8¸GÑ3DÕEØÐ3Ò3Ø×*Ñ*×1Ñ1°(¸7Ñ2CÕDà%˜gÓ%�uñ	&ùò ?s
   •C"«C"c                 óŠ  — t        «       i d}}}|D ]…  }|j                  j                  «       D ]f  \  }}|j                  �$|j	                  t        |j                  «      «       |j                  €ŒC|j	                  t        |j                  «      «       Œh Œ‡ t        |d„ ¬«      D ]—  }||v rŒt        dt        |«      «      D ]G  }	t        |«      dz  |	z   }
t        |	t        |«      «      D ]  }||	|dz    }|j                  ||
«       Œ ŒI |D ],  }| j                  |«      }|t        j                  d|«      z  }Œ. Œ™ ||fS )NrL   c                 ó   — t        | «       | fS r†   r`  ra  s    rM   rf   z5InsertionMorphAction.compileActions.<locals>.<lambda>|  s   € ´c¸!³f°W¸a°L€ rL   rc  r   r+   r   ri   )re  r  r¬   r‡  rf  rª   rˆ  rg  rh  r¨   ri  rÁ   rb   rc   )r®   r  rZ  r,  rí   rj  rk  rl  rt  ÚstartÚ
startIndexÚlimitÚglyphsr•  r±   s                  rM   r  z#InsertionMorphAction.compileActionsp  s[  € ä'*£u¨b°#˜f�ˆØò 	DˆEØ&+×&7Ñ&7×&=Ñ&=Ó&?ò DÑ"�˜UØ×/Ñ/Ð;Ø—K‘K¤ e×&BÑ&BÓ CÔDØ×.Ñ.Ñ:Ø—K‘K¤ e×&AÑ&AÓ BÕCñ	Dð	Dô ˜WÑ*@ÔAò 	5ˆFð ˜Ñ$ØÜ˜q¤# f£+Ó.ò ?�Ü! &›k¨QÑ.°%Ñ7�
Ü" 5¬#¨f«+Ó6ò ?�EØ# E¨E°A©IÐ6�FØ×*Ñ*¨6°:Õ>ñ?ð?ð
  ò 5�ØŸ/™/¨%Ó0�Øœ&Ÿ+™+ d¨GÓ4Ñ4‘ñ5ð	5ð" �{Ð"Ð"rL   N)r8   r9   r:   r?  r@  r  rŠ   rÇ   r¹   r�  r×   rà   r  r  rK   rL   rM   r�  r�  	  sH   „ Ø€JØÐò€FòIò(ò<
ò"Dòò&ð  ñ#ó ñ#rL   r�  c                   ó   — e Zd Zd„ Zdd„Zy)ÚFeatureParamsc                 óÄ   — t         j                  |d   «      | j                  k(  s$J d|d   ›d| j                  j                  ›�«       ‚t	        j
                  | ||«       y )NÚ
FeatureTagz&Wrong FeatureParams type for feature 'z': )ÚfeatureParamTypesrÝ   Ú	__class__r8   r   rÇ   )r‰   rÎ   r®   s      rM   rÇ   zFeatureParams.compile‘  s[   € ä×!Ñ! &¨Ñ"6Ó7¸4¿>¹>ÒIñ	
ð �<Ó Ø�N‰N×#Ò#ð
ó	
ØIô
 	×Ñ˜$ ¨Õ-rL   Nc                 ó`   — t        j                  | |||| j                  j                  ¬«       y )N)rÌ   )r   r×   r£  r8   rL  s        rM   r×   zFeatureParams.toXMLš  s    € Ü�‰˜˜i¨¨u¸4¿>¹>×;RÑ;RÖSrL   r
  )r8   r9   r:   rÇ   r×   rK   rL   rM   rŸ  rŸ  �  s   „ ò.ôTrL   rŸ  c                   ó   — e Zd Zy)ÚFeatureParamsSizeN©r8   r9   r:   rK   rL   rM   r¦  r¦  ž  ó   „ ØrL   r¦  c                   ó   — e Zd Zy)ÚFeatureParamsStylisticSetNr§  rK   rL   rM   rª  rª  ¢  r¨  rL   rª  c                   ó   — e Zd Zy)ÚFeatureParamsCharacterVariantsNr§  rK   rL   rM   r¬  r¬  ¦  r¨  rL   r¬  c                   ó,   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zy)ÚCoverageNc                 ó,   — t        | d«      sg | _        y y )Nr�  )Úhasattrr�  r•   s     rM   r‡   zCoverage.populateDefaults­  s   € Ü�t˜XÔ&ØˆD�Kð 'rL   c           	      ó   — | j                   dk(  r|d   | _        | ` y | j                   dk(  rªg x}| _        |d   }t        |d„ ¬«      }||k7  rt        j	                  d«       |}~|D ]i  }|j
                  }|j                  }|j                  |«      }	|j                  |«      dz   }
|j                  |j                  t        |	|
«      «      «       Œk | ` y g | _        t        j	                  d| j                   «       | ` y )	Nr   Ú
GlyphArrayr+   ÚRangeRecordc                 ó   — | j                   S r†   )ÚStartCoverageIndex©rm  s    rM   rf   z#Coverage.postRead.<locals>.<lambda>º  s   € ¸×9MÑ9M€ rL   rc  ú.GSUB/GPOS Coverage is not sorted by glyph ids.zUnknown Coverage format: %s)ÚFormatr�  rg  ÚlogÚwarningÚStartÚEndrÁ   Úextendr‘  rh  )r‰   ÚrawTabler®   r�  ÚrangesÚsorted_rangesÚrrš  ÚendÚstartIDÚendIDs              rM   ÚpostReadzCoverage.postRead±  sû   € Ø�;‰;˜!ÒØ" <Ñ0ˆDŒKð* ‰Kð) �[‰[˜AÒØ#%Ð%ˆF�T”[Ø˜mÑ,ˆFô # 6Ñ/MÔNˆMØ˜Ò&Ü—‘ÐLÔMØ&�ØØò L�ØŸ™�Ø—e‘e�ØŸ/™/¨%Ó0�ØŸ™¨Ó,¨qÑ0�Ø—‘˜d×3Ñ3´E¸'À5Ó4IÓJÕKðLð ‰Kð ˆDŒKÜ�K‰KÐ5°t·{±{ÔCØ‰KrL   c                 óÚ  — t        | dd «      }|€	g x}| _        d}d|i}|�rB|j                  |«      }t        |«      |k7  }|d   }|gg}|dd  D ]2  }	|	|dz   k7  r&|d   j	                  |«       |j	                  |	g«       |	}Œ4 |d   j	                  |«       |st        |«      dz  t        |«      k  r°d}
t        t        |«      «      D ]^  }||   \  }}t        «       }||_        |j                  |«      |_
        |j                  |«      |_        |
|_        |||<   |
|z   |z
  dz   }
Œ` |r(t        j                  d«       |j                  d„ ¬	«       |D ]  }|`Œ d
}d|i}|| _        |S )Nr�  r   r²  r   éÿÿÿÿrm   r·  c                 ó   — | j                   S r†   )ÚStartIDr¶  s    rM   rf   z#Coverage.preWrite.<locals>.<lambda>ì  s
   € ¨a¯i©i€ rL   rc  r+   r³  )rÅ   r�  ÚgetGlyphIDManyrg  rÂ   r¨   rh  r³  rÉ  ÚgetGlyphNamer»  r¼  rµ  r¹  rº  Úsortr¸  )r‰   r®   r�  Úformatr¾  ÚglyphIDsÚbrokenOrderru  r¿  r±   rø   r}   rš  rÂ  rÁ  s                  rM   ÚpreWritezCoverage.preWriteÊ  s¦  € Ü˜˜x¨Ó.ˆØˆ>Ø#%Ð%ˆF�T”[ØˆØ  &Ð)ˆÚà×*Ñ*¨6Ó2ˆHÜ  Ó*¨hÑ6ˆKà˜A‘;ˆDØ�f�XˆFØ# A B˜<ò �Ø˜d Q™hÒ&Ø˜2‘J×%Ñ% dÔ+Ø—M‘M 7 )Ô,Ø‘ð	ð
 �2‰J×Ñ˜dÔ#áœc &›k¨A™o´°F³Ò;à�Üœs 6›{Ó+ò 4�AØ!'¨¡‘J�E˜3Ü#›�AØ %�A”IØ"×/Ñ/°Ó6�A”GØ ×-Ñ-¨cÓ2�A”EØ+0�AÔ(Ø !�F˜1‘IØ! C™K¨%Ñ/°!Ñ3‘Eð4ñ Ü—K‘KÐ PÔQØ—K‘KÑ$7�KÔ8Øò "�AØ™	ð"à�Ø)¨6Ð2�ð ˆŒØˆrL   c                 ón   — t        | dg «      D ]%  }|j                  d|¬«       |j                  «        Œ' y )Nr�  ÚGlyphr  )rÅ   rÊ   rË   )r‰   rú   r®   r�   s       rM   ÚtoXML2zCoverage.toXML2ö  s9   € Ü   x°Ó4ò 	 ˆIØ×Ñ ¨yÐÔ9Ø×ÑÕñ	 rL   c                 ó\   — t        | dd «      }|€	g }|| _        |j                  |d   «       y )Nr�  r¶   )rÅ   r�  rÂ   )r‰   rÌ   rÍ   rÞ   r®   r�  s         rM   rà   zCoverage.fromXMLû  s1   € Ü˜˜x¨Ó.ˆØˆ>ØˆFØ ˆDŒKØ�‰�e˜G‘nÕ%rL   r†   ©r8   r9   r:   r‡   rÅ  rÐ  rÓ  rà   rK   rL   rM   r®  r®  ª  s   „ óòò2*òX ó
&rL   r®  l   ÿÿ c                   óB   — e Zd Zd	d„Zd„ Zed„ «       Zd„ Zd„ Zd„ Z	d„ Z
y)
ÚDeltaSetIndexMapNc                 ó,   — t        | d«      sg | _        y y ©NrÖ   ©r°  rÖ   r•   s     rM   r‡   z!DeltaSetIndexMap.populateDefaults	  ó   € Ü�t˜YÔ'ØˆD�Lð (rL   c                 ó2   — |d   dz  dk(  sJ ‚|d   | _         y )NÚEntryFormatéÀÿ  r   rÖ   )rÖ   )r‰   r¾  r®   s      rM   rÅ  zDeltaSetIndexMap.postRead  s&   € Ø˜Ñ'¨&Ñ0°QÒ6Ð6Ð6Ø 	Ñ*ˆ�rL   c                 óè   — d}| D ]  }||z  }Œ	 |dz  }d}|r|dz  }|dz  }|rŒt        |d«      }|dk  sJ ‚|d|z
  z	  |d|z  dz
  z  z  }|dk  rd}n|dk  rd}n
|dk  rd}nd	}|dz
  d	z  |dz
  z  S )
Nr   r»   r   r.   éÿ   r+   iÿÿÿ rm   r,   )Úmax)rÖ   ÚoredÚidxÚinnerÚ	innerBitsÚ	entrySizes         rM   ÚgetEntryFormatzDeltaSetIndexMap.getEntryFormat  sÈ   € àˆØò 	ˆCØ�C‰K‰Dð	ð �v‘ˆØˆ	ÙØ˜‰NˆIØ�a‰KˆEò ô ˜	 1Ó%ˆ	Ø˜BŠÐˆà˜˜i™Ñ(¨T°a¸9±nÈÑ5IÑ-JÑKˆØ�:ÒØ‰IØ�ZÒØ‰IØ�ZÒØ‰IàˆIà˜Q‘ 1Ñ$¨°Q©Ñ7Ð7rL   c                 óÜ   — t        | dd «      }|€	g x}| _        t        |«      dkD  rdnd| _        | j                  j                  «       }t        |«      |d<   | j                  |«      |d<   |S )NrÖ   r»   r   r   ÚMappingCountrÝ  )rÅ   rÖ   r¨   r¸  ré   Úcopyrç  )r‰   r®   rÖ   r¾  s       rM   rÐ  zDeltaSetIndexMap.preWrite+  so   € Ü˜$ 	¨4Ó0ˆØˆ?Ø%'Ð'ˆG�d”lÜ˜w›<¨&Ò0‘a°aˆŒØ—=‘=×%Ñ%Ó'ˆÜ#& w£<ˆ�Ñ Ø"&×"5Ñ"5°gÓ">ˆ�ÑØˆrL   c                 ó  — |j                  d«       |j                  «        t        t        | dg «      «      D ]R  \  }}d|fg}|t        k7  r|j                  d|dz	  fd|dz  fg«       |j                  d|«       |j                  «        ŒT y )	Nz7Omitted values default to 0xFFFF/0xFFFF (no variations)rÖ   rø   Úouterr.   rä  r»   ÚMap)r5  rË   rù   rÅ   r‘   r½  rÊ   )r‰   rú   r®   r}   r¶   rÍ   s         rM   rÓ  zDeltaSetIndexMap.toXML25  s›   € ð 	×ÑÐSÔTØ×ÑÔÜ!¤'¨$°	¸2Ó">Ó?ò 
	 ‰HˆAˆuØ˜q�\�NˆEØÔ*Ò*Ø—‘à  %¨2¡+Ð.Ø  %¨&¡.Ð1ðôð ×Ñ  uÔ-Ø×ÑÕñ
	 rL   c                 óú   — t        | dd «      }|€	g x| _        }t        |d   «      }t        |j                  dd«      «      }t        |j                  dd«      «      }|dk  sJ ‚|j	                  ||dz  |z  «       y )NrÖ   rø   rì  Ú0xFFFFrä  r»   r.   )rÅ   rÖ   r   rÝ   Úinsert)	r‰   rÌ   rÍ   rÞ   r®   rÖ   rø   rì  rä  s	            rM   rà   zDeltaSetIndexMap.fromXMLF  s|   € Ü˜$ 	¨4Ó0ˆØˆ?Ø%'Ð'ˆDŒL˜7Ü˜˜w™Ó(ˆÜ˜Ÿ™ 7¨HÓ5Ó6ˆÜ˜Ÿ™ 7¨HÓ5Ó6ˆØ˜ŠÐˆØ�‰�u˜u¨™{¨eÑ3Õ4rL   c                 ó\   — |t        | j                  «      k  r| j                  |   S t        S r†   )r¨   rÖ   r‘   )r‰   r}   s     rM   Ú__getitem__zDeltaSetIndexMap.__getitem__P  s&   € Ø"#¤c¨$¯,©,Ó&7Ò"7ˆt�|‰|˜A‰ÐOÔ=OÐOrL   r†   )r8   r9   r:   r‡   rÅ  r  rç  rÐ  rÓ  rà   rò  rK   rL   rM   r×  r×    s5   „ óò+ð ñ8ó ð8ò2ò ò"5óPrL   r×  Úuint8c                   ó2   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zy)	Ú	VarIdxMapNc                 ó,   — t        | d«      si | _        y y rÙ  rÚ  r•   s     rM   r‡   zVarIdxMap.populateDefaultsU  rÛ  rL   c                 óÖ   — |d   dz  dk(  sJ ‚|j                  «       }|d   }|j                  |d   gt        |«      t        |«      z
  z  «       t        t	        ||«      «      | _        y )NrÝ  rÞ  r   rÖ   rÇ  )ÚgetGlyphOrderr½  r¨   ÚdictÚziprÖ   )r‰   r¾  r®   r¦   ÚmapLists        rM   rÅ  zVarIdxMap.postReadY  si   € Ø˜Ñ'¨&Ñ0°QÒ6Ð6Ð6Ø×'Ñ'Ó)ˆ
Ø˜9Ñ%ˆØ�‰˜ ™�}¬¨J«¼#¸g»,Ñ(FÑGÔHÜœC 
¨GÓ4Ó5ˆ�rL   c                 óD  — t        | dd «      }|€	i x}| _        |j                  «       }|D �cg c]  }||   ‘Œ	 }}t        |«      dkD  r(|d   |d   k(  r|d= t        |«      dkD  r|d   |d   k(  rŒd|i}t        |«      |d<   t        j                  |«      |d<   |S c c}w )NrÖ   r   éþÿÿÿrÇ  ré  rÝ  )rÅ   rÖ   rø  r¨   r×  rç  )r‰   r®   rÖ   r¦   r–  r¾  s         rM   rÐ  zVarIdxMap.preWrite`  s¾   € Ü˜$ 	¨4Ó0ˆØˆ?Ø%'Ð'ˆG�d”là×'Ñ'Ó)ˆ
Ø'1Ö2 !�7˜1“:Ð2ˆÐ2Ü�'‹l˜QÒ 7¨2¡;°'¸"±+Ò#=Ø˜�ô �'‹l˜QÒ 7¨2¡;°'¸"±+Ó#=ð ˜wÐ'ˆÜ#& w£<ˆ�Ñ Ü"2×"AÑ"AÀ'Ó"Jˆ�ÑØˆùò 3s   ­Bc                 óÂ   — t        t        | di «      j                  «       «      D ]8  \  }}d|fd|dz	  fd|dz  ff}|j                  d|«       |j	                  «        Œ: y )NrÖ   r•  rì  r.   rä  r»   rí  )rg  rÅ   r¬   rÊ   rË   )r‰   rú   r®   r•  r¶   rÍ   s         rM   rÓ  zVarIdxMap.toXML2o  sq   € Ü"¤7¨4°¸BÓ#?×#EÑ#EÓ#GÓHò 	 ‰LˆE�5à˜%Ð Ø˜% 2™+Ð&Ø˜% &™.Ð)ðˆEð
 ×Ñ  uÔ-Ø×ÑÕñ	 rL   c                 óÖ   — t        | dd «      }|€	i }|| _        	 |d   }t        |d   «      }t        |d   «      }|dk  sJ ‚|dz  |z  ||<   y #  |j                  «       |d      }Y ŒIxY w)NrÖ   r•  rø   rì  rä  r»   r.   )rÅ   rÖ   rø  r   )	r‰   rÌ   rÍ   rÞ   r®   rÖ   r•  rì  rä  s	            rM   rà   zVarIdxMap.fromXMLy  s‰   € Ü˜$ 	¨4Ó0ˆØˆ?ØˆGØ"ˆDŒLð	9Ø˜'‘NˆEô ˜˜w™Ó(ˆÜ˜˜w™Ó(ˆØ˜ŠÐˆØ 2™+¨Ñ.ˆ�Šøð	9Ø×&Ñ&Ó(¨¨w©Ñ8ŠEús   šA ÁA(c                 óB   — | j                   j                  |t        «      S r†   )rÖ   rÝ   r‘   )r‰   r�   s     rM   rò  zVarIdxMap.__getitem__‡  s   € Ø�|‰|×Ñ 	Ô+=Ó>Ð>rL   r†   )	r8   r9   r:   r‡   rÅ  rÐ  rÓ  rà   rò  rK   rL   rM   rõ  rõ  T  s    „ óò6òò ò/ó?rL   rõ  c                   ó   — e Zd Zd„ Zy)ÚVarRegionListc                 ó¨   — |j                  d«      }|rt        |j                  «      | _        i | j                  ¥dt        | j                  d«      i¥S )NÚfvarÚRegionAxisCount)rÝ   r¨   Úaxesr  ré   r   )r‰   r®   Ú	fvarTables      rM   rÐ  zVarRegionList.preWriteŒ  sR   € ð —H‘H˜VÓ$ˆ	ÙÜ#& y§~¡~Ó#6ˆDÔ ð
Ø�m‰mð
àœ~¨d¯m©mÐ=NÓOñ
ð 	
rL   N©r8   r9   r:   rÐ  rK   rL   rM   r  r  ‹  s   „ ó
rL   r  c                   ó,   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zy)ÚSingleSubstNc                 ó,   — t        | d«      si | _        y y rÙ  rÚ  r•   s     rM   r‡   zSingleSubst.populateDefaultsž  rÛ  rL   c                 ó¾  — i }t        |d   «      }| j                  dk(  rV|d   }|j                  |«      }|D �cg c]
  }||z   dz  ‘Œ }}|j                  |«      }	t	        ||	«      D ]
  \  }
}|||
<   Œ nZ| j                  dk(  r7t        |«      |d   k(  sJ d«       ‚|d   }t	        ||«      D ]
  \  }
}|||
<   Œ nJ d	| j                  z  «       ‚|| _        | `y c c}w )
Nr®  r   ÚDeltaGlyphIDé   r+   Ú
GlyphCountz invalid SingleSubstFormat2 tableÚ
Substituteúunknown format: %s)Ú_getGlyphsFromCoverageTabler¸  rÊ  r‘  rú  r¨   rÖ   )r‰   r¾  r®   rÖ   Úinputrz  Ú	inputGIDSr±   ÚoutGIDSÚoutNamesÚinpÚoutÚsubstÚsubs                 rM   rÅ  zSingleSubst.postRead¢  s  € ØˆÜ+¨H°ZÑ,@ÓAˆØ�;‰;˜!ÒØ˜^Ñ,ˆEØ×+Ñ+¨EÓ2ˆIØ@IÖJ°W˜ %™¨5Ó0ÐJˆGÐJØ×,Ñ,¨WÓ5ˆHÜ  xÓ0ò #‘��SØ"�˜’ñ#à�[‰[˜AÒä�E“
˜h |Ñ4Ò4ð2à1ó2Ø4à˜\Ñ*ˆEÜ  uÓ-ò #‘��SØ"�˜’ñ#ð 9Ð*¨T¯[©[Ñ8Ó8�1ØˆŒØ‰Kùò Ks   ºCc                 ó"  — t        | dd «      }|€	i x}| _        t        |j                  «       «      }|j                  }|D ��cg c]  \  }} ||«       ||«      f‘Œ }}}t        t        ||«      «      }d}	d }
|D ]  \  }}|
€||z
  dz  }
||
z   dz  |k7  sŒ n |
€d}	nd}	i }|	| _        t        «       }|D �cg c]
  }|d   d   ‘Œ }}|D �cg c]
  }|d   d   ‘Œ }}||_	        ||d<   |	dk(  r|
€J ‚|
|d<   |S ||d<   |S c c}}w c c}w c c}w )	NrÖ   r+   r  r   r   r®  r  r  )
rÅ   rÖ   Úlistr¬   rÁ   rg  rú  r¸  r®  r�  )r‰   r®   rÖ   r¬   rÁ   rm  ÚbÚgidItemsÚsortableItemsrÍ  rz  ÚinIDÚoutIDr¾  ÚcovÚitemr  r  s                     rM   rÐ  zSingleSubst.preWrite¸  sc  € Ü˜$ 	¨4Ó0ˆØˆ?Ø%'Ð'ˆG�d”lÜ�W—]‘]“_Ó%ˆØ—_‘_ˆ
Ø?D×E±t°q¸!‘Z “]¡J¨q£MÒ2ÐEˆÑEÜœs 8¨UÓ3Ó4ˆð ˆØˆØ#ò 	‰KˆD�%Øˆ}Ø ™¨Ñ.�à�u‘ Ñ%¨Ó.Ùð	ð ˆ}à‘à�àˆØˆŒÜ‹jˆØ(5Ö6 ��a‘˜“Ð6ˆÐ6Ø(5Ö6 ��a‘˜“Ð6ˆÐ6ØˆŒ
Ø"ˆ�ÑØ�QŠ;ØÐ$Ð$Ð$Ø',ˆH�^Ñ$ð ˆð &+ˆH�\Ñ"Øˆùó? Fùò, 7ùÚ6s   ÁDÂ8DÃDc                 ó®   — t        | j                  j                  «       «      }|D ]-  \  }}|j                  dd|fd|fg«       |j	                  «        Œ/ y )NÚSubstitutionÚinr  )rg  rÖ   r¬   rÊ   rË   )r‰   rú   r®   r¬   ÚinGlyphÚoutGlyphs         rM   rÓ  zSingleSubst.toXML2ß  sW   € Ü�t—|‘|×)Ñ)Ó+Ó,ˆØ!&ò 	 ÑˆG�XØ×Ñ °$¸°À5È(ÐBSÐ0TÔUØ×ÑÕñ	 rL   c                 óJ   — t        | dd «      }|€	i }|| _        |d   ||d   <   y )NrÖ   r  r&  )rÅ   rÖ   )r‰   rÌ   rÍ   rÞ   r®   rÖ   s         rM   rà   zSingleSubst.fromXMLå  s3   € Ü˜$ 	¨4Ó0ˆØˆ?ØˆGØ"ˆDŒLØ$ U™|ˆ��d‘ÒrL   r†   rÕ  rK   rL   rM   r
  r
  �  s   „ óòò,%òN ó,rL   r
  c                   ó<   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zed„ «       Z	y)	ÚMultipleSubstNc                 ó,   — t        | d«      si | _        y y rÙ  rÚ  r•   s     rM   r‡   zMultipleSubst.populateDefaultsî  rÛ  rL   c                 óê   — i }| j                   dk(  r@t        |d   «      }|d   D �cg c]  }|j                  ‘Œ }}t        t	        ||«      «      }nJ d| j                   z  «       ‚|| _        | ` y c c}w )Nr   r®  ÚSequencer  )r¸  r  r  rù  rú  rÖ   )r‰   r¾  r®   rÖ   r�  Úsr  s          rM   rÅ  zMultipleSubst.postReadò  su   € ØˆØ�;‰;˜!ÒÜ0°¸*Ñ1EÓFˆFØ+3°JÑ+?Ö@ a�Q—\“\Ð@ˆEÐ@Üœ3˜v uÓ-Ó.‰Gà8Ð*¨T¯[©[Ñ8Ó8�1ØˆŒØ‰Kùò As   §A0c                 ó&  — t        | dd «      }|€	i x}| _        t        «       }t        t	        |j                  «       «      |j                  ¬«      |_        d| _        ||j                  D �cg c]  }| j                  ||   «      ‘Œ c}dœ}|S c c}w )NrÖ   rc  r   )r®  r.  )
rÅ   rÖ   r®  rg  r  ÚkeysrÁ   r�  r¸  ÚmakeSequence_)r‰   r®   rÖ   r"  r•  r¾  s         rM   rÐ  zMultipleSubst.preWriteý  s„   € Ü˜$ 	¨4Ó0ˆØˆ?Ø%'Ð'ˆG�d”lÜ‹jˆÜœD §¡£Ó0°d·o±oÔFˆŒ
ØˆŒàØILÏÉÖTÀ˜×+Ñ+¨G°E©NÕ;ÒTñ
ˆð ˆùò Us   Á,Bc                 óÐ   — t        | j                  j                  «       «      }|D ]>  \  }}dj                  |«      }|j	                  dd|fd|fg«       |j                  «        Œ@ y )Nr  r%  r&  r  )rg  rÖ   r¬   r  rÊ   rË   )r‰   rú   r®   r¬   r'  Ú	outGlyphsr  s          rM   rÓ  zMultipleSubst.toXML2
  sd   € Ü�t—|‘|×)Ñ)Ó+Ó,ˆØ"'ò 	 ÑˆG�YØ—(‘(˜9Ó%ˆCØ×Ñ °$¸°À5È#À,Ð0OÔPØ×ÑÕñ	 rL   c                 óJ  — t        | dd «      }|€	i }|| _        |dk(  rJg | _        |D ]=  }t        |t        «      sŒ|\  }}}	|dk(  sŒ | j                  j                  |d   «       Œ? y |dk(  rst        |j                  dt        |«      «      «      }
| j                  |
   }g x}||<   |D ]3  }t        |t        «      sŒ|\  }}}	|dk(  sŒ |j                  |d   «       Œ5 y |d   r|d   j                  d	«      ng }|D �cg c]  }|j                  «       ‘Œ c}||d
   <   y c c}w )NrÖ   r®  rÒ  r¶   r.  rø   r  r  r  r&  )rÅ   rÖ   Úold_coverage_rÜ   rª   rÂ   ÚintrÝ   r¨   r8  r9  )r‰   rÌ   rÍ   rÞ   r®   rÖ   ÚelementÚelement_nameÚelement_attrsr¸   rø   r•  Úglyph_mappingr4  r–  s                  rM   rà   zMultipleSubst.fromXML  sL  € Ü˜$ 	¨4Ó0ˆØˆ?ØˆGØ"ˆDŒLð �:ÒØ!#ˆDÔØ"ò F�Ü! '¬5Ô1ØØ18Ñ.�˜m¨QØ 7Ó*Ø×&Ñ&×-Ñ-¨m¸GÑ.DÕEðFð Ø�:ÒÜ˜Ÿ	™	 '¬3¨w«<Ó8Ó9ˆEØ×&Ñ& uÑ-ˆEØ-/Ð/ˆM˜G E™NØ"ò A�Ü! '¬5Ô1ØØ18Ñ.�˜m¨QØ <Ó/Ø!×(Ñ(¨°wÑ)?Õ@ðAð ð 05°Uª|�E˜%‘L×&Ñ& sÔ+Àˆ	Ø3<Ö=¨a §¡¥	Ò=ˆ��d‘ÒùÒ=s   Ã?D c                 ó(   — t        «       }| |_        |S r†   )r.  r  )r–  Úseqs     rM   r2  zMultipleSubst.makeSequence_1  s   € ä‹jˆØˆŒØˆ
rL   r†   )
r8   r9   r:   r‡   rÅ  rÐ  rÓ  rà   r  r2  rK   rL   rM   r+  r+  í  s0   „ óò	òò ò>ð@ ñó ñrL   r+  c                   ó2   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zy)	ÚClassDefNc                 ó,   — t        | d«      si | _        y y )NÚ	classDefs)r°  rA  r•   s     rM   r‡   zClassDef.populateDefaults9  ó   € Ü�t˜[Ô)ØˆD�Nð *rL   c                 óX  — i }| j                   dk(  ra|d   }|d   }|j                  |«      }|t        |«      z   }|j                  t	        ||«      «      }t        ||«      D ]  \  }	}
|
sŒ	|
||	<   Œ n¯| j                   dk(  r€|d   }|D ]u  }|j                  }
|
sŒ|j                  }|j                  }|j                  |«      }|j                  |«      dz   }|j                  t	        ||«      «      }|D ]  }	|
||	<   Œ	 Œw n t        j                  d| j                   «       || _        | ` y )Nr   Ú
StartGlyphÚClassValueArrayr+   ÚClassRangeRecordzUnknown ClassDef format: %s)r¸  rÁ   r¨   r‘  rh  rú  ÚClassr»  r¼  r¹  rº  rA  )r‰   r¾  r®   rA  rš  Ú	classListrÃ  rÄ  Ú
glyphNamesr�   ÚclsÚrecordsÚrecrÂ  s                 rM   rÅ  zClassDef.postRead=  s=  € Øˆ	à�;‰;˜!ÒØ˜\Ñ*ˆEØ Ð!2Ñ3ˆIØ—o‘o eÓ,ˆGØœc )›nÑ,ˆEØ×.Ñ.¬u°W¸eÓ/DÓEˆJÜ"% j°)Ó"<ò /‘�	˜3ÚØ+.�I˜iÒ(ñ/ð �[‰[˜AÒØÐ1Ñ2ˆGØò 
/�Ø—i‘i�ÙØØŸ	™	�Ø—g‘g�ØŸ/™/¨%Ó0�ØŸ™¨Ó,¨qÑ0�Ø!×2Ñ2´5¸À%Ó3HÓI�
Ø!+ò /�IØ+.�I˜iÒ(ñ/ñ
/ô �K‰KÐ5°t·{±{ÔCØ"ˆŒØ‰KrL   c                 óÀ  — t        | dd «      }|€i | _        y |j                  }g }|j                  «       D ]"  \  }}|sŒ	|j	                   ||«      ||f«       Œ$ |r‚|j                  «        |d   \  }}}	|	||gg}
|dd  D ]C  \  }}}||dz   k7  s||	k7  r*|
d   j                  ||g«       |
j	                  |||g«       |}|}|}	ŒE |
d   j                  ||g«       |
S y )NrA  r   r   rÇ  )rÅ   rA  rÁ   r¬   rÂ   rÌ  r½  )r‰   r®   rA  rÁ   r¬   r�   rJ  ru  ÚlastNameÚlastClsr¿  r±   s               rM   Ú_getClassRangeszClassDef._getClassRanges\  s  € Ü˜D +¨tÓ4ˆ	ØÐØˆDŒNØØ—_‘_ˆ
ØˆØ'Ÿo™oÓ/ò 	B‰NˆI�sÙØØ�L‰L™* YÓ/°¸CÐ@ÕAð	Bñ Ø�J‰JŒLØ&+¨A¡hÑ#ˆD�(˜GØ  hÐ/Ð0ˆFØ+0°°¨9ò Ñ'�˜ CØ˜d Q™hÒ&¨#°ª.Ø˜2‘J×%Ñ% t¨XÐ&6Ô7Ø—M‘M 3¨°Ð";Ô<Ø�Ø$�Ø‘ðð �2‰J×Ñ˜t XÐ.Ô/ØˆMð rL   c                 ó¾  — d}dg i}| j                  |«      }|r¼|d   d   }|d   d   }||z
  dz   }t        |«      dz  |dz   k  rOt        t        |«      «      D ]1  }||   \  }	}
}}}t        «       }||_        ||_        |	|_        |||<   Œ3 d}d|i}nA|d   d   }dg|z  }|D ]'  \  }	}
}}}t        |
|z
  ||z
  dz   «      D ]  }|	||<   Œ	 Œ) d}||dœ}|| _        |S )Nr+   rF  r   r   rÇ  rm   )rD  rE  )rP  r¨   rh  rF  r»  r¼  rG  r¸  )r‰   r®   rÍ  r¾  r¿  Ú
startGlyphÚendGlyphÚ
glyphCountr}   rJ  rš  Ú	startNamerÂ  ÚendNamerL  ÚstartGlyphNameÚclassesr–  s                     rM   rÐ  zClassDef.preWriteu  sD  € ØˆØ&¨Ð+ˆØ×%Ñ% dÓ+ˆÙØ ™ 1™ˆJØ˜b‘z !‘}ˆHØ! JÑ.°Ñ2ˆJÜ�6‹{˜Q‰ ¨a¡Ò/äœs 6›{Ó+ò $�AØ:@À¹)Ñ7�C˜ 	¨3°Ü*Ó,�CØ )�C”IØ%�C”GØ #�C”IØ #�F˜1’Ið$ð �Ø.°Ð7‘ð "(¨¡¨1¡�Ø˜# 
Ñ*�Ø;Aò )Ñ7�C˜ 	¨3°Ü" 5¨:Ñ#5°s¸ZÑ7GÈ!Ñ7KÓLò )˜Ø%(˜ š
ñ)ð)ð �Ø*8ÈWÑU�ØˆŒØˆrL   c                 ó®   — t        | j                  j                  «       «      }|D ]-  \  }}|j                  dd|fd|fg«       |j	                  «        Œ/ y )Nr?  r•  Úclass)rg  rA  r¬   rÊ   rË   )r‰   rú   r®   r¬   r�   rJ  s         rM   rÓ  zClassDef.toXML2”  sV   € Ü�t—~‘~×+Ñ+Ó-Ó.ˆØ#ò 	 ‰NˆI�sØ×Ñ 
¨g°yÐ-AÀGÈSÀ>Ð,RÔSØ×ÑÕñ	 rL   c                 ó\   — t        | dd «      }|€	i }|| _        t        |d   «      ||d   <   y )NrA  rZ  r•  )rÅ   rA  r7  )r‰   rÌ   rÍ   rÞ   r®   rA  s         rM   rà   zClassDef.fromXMLš  s9   € Ü˜D +¨tÓ4ˆ	ØÐØˆIØ&ˆDŒNÜ$'¨¨g©Ó$7ˆ	�%˜‘.Ò!rL   r†   )	r8   r9   r:   r‡   rÅ  rP  rÐ  rÓ  rà   rK   rL   rM   r?  r?  8  s    „ ó òò>ò2ò> ó8rL   r?  c                   ó,   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zy)ÚAlternateSubstNc                 ó,   — t        | d«      si | _        y y )NÚ
alternates)r°  r_  r•   s     rM   r‡   zAlternateSubst.populateDefaults£  s   € Ü�t˜\Ô*Ø ˆD�Oð +rL   c                 ó   — i }| j                   dk(  rPt        |d   «      }|d   }t        |«      t        |«      k(  sJ ‚t        ||«      D ]  \  }}|j                  ||<   Œ nJ d| j                   z  «       ‚|| _        | ` y )Nr   r®  ÚAlternateSetr  )r¸  r  r¨   rú  Ú	Alternater_  )r‰   r¾  r®   r_  r  Úaltsr  Úalts           rM   rÅ  zAlternateSubst.postRead§  s‹   € Øˆ
Ø�;‰;˜!ÒÜ/°¸Ñ0DÓEˆEØ˜NÑ+ˆDÜ�u“:¤ T£Ò*Ð*Ð*Ü  tÓ,ò 0‘��SØ"%§-¡-�
˜3’ñ0ð 9Ð*¨T¯[©[Ñ8Ó8�1Ø$ˆŒØ‰KrL   c                 óì  — d| _         t        | dd «      }|€	i x}| _        t        |j	                  «       «      }t        t        |«      «      D ]!  }||   \  }}|j                  |«      ||f||<   Œ# |j                  «        t        «       }|D �cg c]  }|d   ‘Œ	 c}|_
        g }|D �cg c]  }|d   ‘Œ	 }	}|	D ]$  }t        «       }
||
_        |j                  |
«       Œ& d| _        ||dœS c c}w c c}w )Nr   r_  rÇ  )r®  ra  )r¸  rÅ   r_  r  r¬   rh  r¨   rÁ   rÌ  r®  r�  ra  rb  rÂ   ÚsortCoverageLast)r‰   r®   r_  r¬   r}   r�   re  r"  r#  ÚsetListrc  s              rM   rÐ  zAlternateSubst.preWrite´  s  € ØˆŒÜ˜T <°Ó6ˆ
ØÐØ+-Ð-ˆJ˜œÜ�Z×%Ñ%Ó'Ó(ˆÜ”s˜5“zÓ"ò 	BˆAØ" 1™X‰NˆI�sØ—‘ yÓ1°9¸cÐAˆE�!ŠHð	Bð 	�
‰
ŒÜ‹jˆØ*/Ö0 $�d˜1“gÒ0ˆŒ
Øˆ
Ø(-Ö. �4˜“8Ð.ˆÐ.Øò 	$ˆCÜ“>ˆDØ ˆDŒNØ×Ñ˜dÕ#ð	$ð !"ˆÔØ°Ñ<Ð<ùò 1ùâ.s   ÂC,Â)C1c                 ó:  — t        | j                  j                  «       «      }|D ]s  \  }}|j                  d|¬«       |j	                  «        |D ]%  }|j                  d|¬«       |j	                  «        Œ' |j                  d«       |j	                  «        Œu y )Nra  r”  rb  )rg  r_  r¬   rÑ   rË   rÊ   rÔ   )r‰   rú   r®   r¬   r�   r_  rd  s          rM   rÓ  zAlternateSubst.toXML2Î  s–   € Ü�t—‘×,Ñ,Ó.Ó/ˆØ%*ò 	 Ñ!ˆI�zØ×Ñ˜~°YÐÔ?Ø×ÑÔØ!ò $�Ø×#Ñ# K°sÐ#Ô;Ø×!Ñ!Õ#ð$ð ×Ñ˜^Ô,Ø×ÑÕñ	 rL   c                 ó°   — t        | dd «      }|€	i }|| _        |d   }g }|||<   |D ]-  }t        |t        «      sŒ|\  }}}|j	                  |d   «       Œ/ y )Nr_  r•  )rÅ   r_  rÜ   rª   rÂ   )	r‰   rÌ   rÍ   rÞ   r®   r_  r�   re  r8  s	            rM   rà   zAlternateSubst.fromXMLÙ  sr   € Ü˜T <°Ó6ˆ
ØÐØˆJØ(ˆDŒOØ˜'‘Nˆ	ØˆØ #ˆ
�9ÑØò 	'ˆGÜ˜g¤uÔ-ØØ#*Ñ ˆD�%˜Ø�J‰J�u˜W‘~Õ&ñ		'rL   r†   rÕ  rK   rL   rM   r]  r]  ¢  s   „ ó!òò=ò4	 ó'rL   r]  c                   ó<   — e Zd Zdd„Zd„ Zed„ «       Zd„ Zd„ Zd„ Z	y)	ÚLigatureSubstNc                 ó,   — t        | d«      si | _        y y )NÚ	ligatures)r°  rm  r•   s     rM   r‡   zLigatureSubst.populateDefaultsé  rB  rL   c                 ó  — i }| j                   dk(  r[t        |d   «      }|d   }t        |«      t        |«      k(  sJ ‚t        t        |«      «      D ]  }||   j                  |||   <   Œ nJ d| j                   z  «       ‚|| _        | ` y )Nr   r®  ÚLigatureSetr  )r¸  r  r¨   rh  ÚLigaturerm  )r‰   r¾  r®   rm  r  ÚligSetsr}   s          rM   rÅ  zLigatureSubst.postReadí  s”   € Øˆ	Ø�;‰;˜!ÒÜ/°¸Ñ0DÓEˆEØ˜}Ñ-ˆGÜ�u“:¤ W£Ò-Ð-Ð-Üœ3˜u›:Ó&ò :�Ø&-¨a¡j×&9Ñ&9�	˜% ™(Ò#ñ:ð 9Ð*¨T¯[©[Ñ8Ó8�1Ø"ˆŒØ‰KrL   c                 ó   — t        | «       S r†   r`  rò   s    rM   Ú_getLigatureSortKeyz!LigatureSubst._getLigatureSortKeyú  s   € ô6 �J“ÐÐrL   c                 óx  — d| _         t        | dd «      }|€	i x}| _        |rªt        t	        t        |«      «      t        «      rˆt        «       }t        |j                  «       | j                  ¬«      D ]T  }t        «       }|dd  |_        t        |«      |_        ||   |_        |j!                  |d   g «      j#                  |«       ŒV |}t%        |j'                  «       «      }t)        t        |«      «      D ]!  }||   \  }}	|j+                  |«      ||	f||<   Œ# |j-                  «        t/        «       }
|D �cg c]  }|d   ‘Œ	 c}|
_        g }|D �cg c]  }|d   ‘Œ	 }}|D ]>  }	t3        «       }g x}|_        |	D ]  }|j#                  |«       Œ |j#                  |«       Œ@ d| _        |
|dœS c c}w c c}w )Nr   rm  rc  r   rÇ  )r®  ro  )r¸  rÅ   rm  rÜ   ÚnextÚiterrª   rù  rg  r1  rs  rp  Ú	Componentr¨   Ú	CompCountÚLigGlyphri  rÂ   r  r¬   rh  rÁ   rÌ  r®  r�  ro  rf  )r‰   r®   rm  ÚnewLigaturesÚcompsÚligaturer¬   r}   r�   re  r"  r#  rq  rg  ÚligSetÚligsÚligs                    rM   rÐ  zLigatureSubst.preWrite  s½  € ØˆŒÜ˜D +¨tÓ4ˆ	ØÐØ)+Ð+ˆI˜œáœ¤D¬¨i«Ó$9¼5ÔAô
  ›6ˆLÜ 	§¡Ó 0°d×6NÑ6NÔOò G�Ü#›:�Ø%*¨1¨2 Y�Ô"Ü%(¨£Z�Ô"Ø$-¨eÑ$4�Ô!Ø×'Ñ'¨¨a©°"Ó5×<Ñ<¸XÕFðGð %ˆIä�Y—_‘_Ó&Ó'ˆÜ”s˜5“zÓ"ò 	BˆAØ" 1™X‰NˆI�sØ—‘ yÓ1°9¸cÐAˆE�!ŠHð	Bð 	�
‰
ŒÜ‹jˆØ*/Ö0 $�d˜1“gÒ0ˆŒ
àˆØ(-Ö. �4˜“8Ð.ˆÐ.Øò 	#ˆCÜ “]ˆFØ%'Ð'ˆD�6”?Øò !�Ø—‘˜CÕ ð!à�N‰N˜6Õ"ð	#ð !"ˆÔØ°Ñ8Ð8ùò 1ùò /s   Ä;F2ÅF7c           	      ó‚  — t        | j                  j                  «       «      }|D ]—  \  }}|j                  d|¬«       |j	                  «        |D ]I  }|j                  d|j                  dj                  |j                  «      ¬«       |j	                  «        ŒK |j                  d«       |j	                  «        Œ™ y )Nro  r”  rp  r  )r•  ró   )
rg  rm  r¬   rÑ   rË   rÊ   ry  r  rw  rÔ   )r‰   rú   r®   r¬   r�   rq  r  s          rM   rÓ  zLigatureSubst.toXML2A  s°   € Ü�t—~‘~×+Ñ+Ó-Ó.ˆØ"'ò 		 ÑˆI�wØ×Ñ˜}°IÐÔ>Ø×ÑÔØò $�Ø×#Ñ#Ø c§l¡l¸s¿x¹xÈÏÉÓ?Vð $ô ð ×!Ñ!Õ#ð	$ð
 ×Ñ˜]Ô+Ø×ÑÕñ		 rL   c                 óD  — t        | dd «      }|€	i }|| _        |d   }g }|||<   |D ]w  }t        |t        «      sŒ|\  }}}t	        «       }	|d   |	_        |d   }
|
r|
j                  d«      ng |	_        t        |	j                  «      |	_	        |j                  |	«       Œy y )Nrm  r•  ró   r  )rÅ   rm  rÜ   rª   rp  ry  r8  rw  r¨   rx  rÂ   )r‰   rÌ   rÍ   rÞ   r®   rm  r�   r~  r8  r  ró   s              rM   rà   zLigatureSubst.fromXMLN  s°   € Ü˜D +¨tÓ4ˆ	ØÐØˆIØ&ˆDŒNØ˜'‘Nˆ	ØˆØ#ˆ	�)ÑØò 		ˆGÜ˜g¤uÔ-ØØ#*Ñ ˆD�%˜Ü“*ˆCØ  ™>ˆCŒLØ˜|Ñ,ˆJÙ5?˜J×,Ñ,¨SÔ1ÀRˆCŒMÜ §¡Ó.ˆCŒMØ�K‰K˜Õñ		rL   r†   )
r8   r9   r:   r‡   rÅ  r  rs  rÐ  rÓ  rà   rK   rL   rM   rk  rk  è  s0   „ ó òð ñ ó ð ò8(9òT órL   rk  c                   ó*   — e Zd Zd„ Zd„ Zddddefd„Zy)	ÚCOLRc                 ó.  — |j                  d¬«      }| j                  «       D ]O  }|j                  dk7  r|j                  |j                  «       Œ.|j                  ||i ¬«      ||j                  <    n t        d«      ‚t        j                  | ||«      S )Nr   )ÚoffsetÚLayerRecordCount)Ú	tableDictz$LayerRecordCount converter not found)	rw  ÚgetConvertersrÌ   Úadvancer?  ÚreadÚAssertionErrorr   r¹   )r‰   r1  r®   Ú	subReaderÚconvs        rM   r¹   zCOLR.decompilec  s–   € ð ×'Ñ'¨qÐ'Ó1ˆ	Ø×&Ñ&Ó(ò 	IˆDØ�y‰yÐ.Ò.Ø×!Ñ! $§/¡/Ô2ØØ $§	¡	¨)°TÀR 	Ó HˆF�4—9‘9ÑÙð	Iô !Ð!GÓHÐHÜ×"Ñ" 4¨°Ó6Ð6rL   c                 ó\   — d | _         i | j                  ¥dt        | j                  d«      i¥S )Nr†  )r†  ré   r   ©r‰   r®   s     rM   rÐ  zCOLR.preWritet  s8   € ð !%ˆÔð
Ø�m‰mð
à¤¨t¯}©}Ð>PÓ Qñ
ð 	
rL   ÚglyphSetr(   Úquantizationc                 óÐ  — | j                   dk(  ry i }| j                  j                  D ]2  }	 |j                  j	                  | ||«      }|€Œ$|||j                  <   Œ4 t        | d«      xr | j                  d u}|s|rd | _
        y y |s t        «       | _
        d| j                  _        || j                  _        y # t
        $ r!}ddlm}  |d|j                  ›�«      |‚d }~ww xY w)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�  rL  ÚclipBoxÚer“  ÚhasClipLists	            rM   ÚcomputeClipBoxeszCOLR.computeClipBoxes~  sì   € Ø�<‰<˜1ÒØàˆØ×%Ñ%×:Ñ:ò 	/ˆCðØŸ)™)×2Ñ2°4¸À<ÓP�ð Ñ"Ø'.��c—m‘mÒ$ð	/ô ˜d JÓ/ÒM°D·M±MÈÐ4MˆÙÙØ $�•ð ñ Ü (£
�”Ø'(�—‘Ô$Ø"'ˆD�M‰MÕøô% ò Ý6á Ø9¸#¿-¹-Ð9JÐKóàðûðús   ­B;Â;	C%ÃC Ã C%N©r   )r8   r9   r:   r¹   rÐ  r7  r¡  rK   rL   rM   rƒ  rƒ  b  s   „ ò7ò"
ñ(¨ð (Àcô (rL   rƒ  c                   ó.   ‡ — e Zd Zed„ «       Zˆ fd„Zˆ xZS )Ú
LookupListc                 óî   — | j                   D ]a  }|j                  D ]P  }t        |«      j                  j	                  d«      r  yt        |«      j                  j	                  d«      sŒO  y Œc t
        ‚)NÚSubstÚGSUBÚPosÚGPOS)ÚLookupÚSubTablerç   r8   ÚendswithÚ
ValueError)r‰   ÚlÚsts      rM   ÚtablezLookupList.tableœ  sf   € à—‘ò 	"ˆAØ—j‘jò "�Ü˜“8×$Ñ$×-Ñ-¨gÔ6Ú!Ü˜“8×$Ñ$×-Ñ-¨eÕ4Ú!ñ	"ð	"ô ÐrL   c           
      ót  •— |rd|vst         |d   j                  vrt        ‰| �  ||«      S |d   j                  t            | j                     }| j                  «       D �]U  }|j                  rât        | |j                  g «      }t        |«      D ]¼  \  }}t        |«      |v rˆt        |t        |«         Ž }|j                  }	|j                  r|j                  › d|	› �}	|j                  r|j                  \  }
}}|	› d|› d|
› d|› d�}	|j                  |	«       |j                  «        |j!                  ||||j                  d|fg«       Œ¾ Œò|j"                  r"t%        |j"                  d t'        | «      «      s�Œ t        | |j                  d «      }|j!                  ||||j                  g «       �ŒX y )NÚDebgz: z in z (ú/ú)rø   )r!   r|   ÚsuperrÓ  r°  rˆ  ÚrepeatrÅ   rÌ   rù   Ústrr    ÚlocationÚfeaturer5  rË   ÚxmlWriteÚauxÚevalÚvars)r‰   rú   r®   Ú	debugDatar�  r¶   ÚlookupIndexr#  ÚinfoÚtagÚscriptÚlanguager¹  r£  s                €rM   rÓ  zLookupList.toXML2¦  s   ø€ áØ˜TÑ!Ü$¨D°©L×,=Ñ,=Ñ=ä‘7‘> )¨TÓ2Ð2Ø˜‘L×%Ñ%Ô&;Ñ<¸T¿Z¹ZÑHˆ	Ø×&Ñ&Ó(ó 	EˆDØ�{Š{Ü  d§i¡i°Ó4�Ü)2°5Ó)9ò Ñ%�K Ü˜;Ó'¨9Ñ4Ü.°	¼#¸kÓ:JÑ0KÐL˜Ø"Ÿm™m˜ØŸ9š9Ø%)§Y¡Y K¨r°#°Ð"7˜CØŸ<š<Ø8<¿¹Ñ5˜F H¨gØ%( E¨¨g¨Y°b¸¸ÀÀ(ÀÈ1Ð"M˜CØ!×)Ñ)¨#Ô.Ø!×)Ñ)Ô+à—M‘MØ! 4¨¨t¯y©y¸GÀ[Ð;QÐ:Rõñð  —8’8¤D¨¯©°4¼¸d»Ô$DÙÜØ˜$Ÿ)™) Tó�ð —‘˜i¨¨u°d·i±iÀÖDñ1	ErL   )r8   r9   r:   Úpropertyr°  rÓ  Ú__classcell__)r£  s   @rM   r¤  r¤  ›  s!   ø„ Øñó ð÷ Eð  ErL   r¤  c                   ó   — e Zd Zd„ Zy)ÚBaseGlyphRecordArrayc                 óv   ‡— t        | j                  ˆfd„¬«      | _        | j                  j                  «       S )Nc                 ó:   •— ‰j                  | j                  «      S r†   ©rÁ   rœ  ©rL  r®   s    €rM   rf   z/BaseGlyphRecordArray.preWrite.<locals>.<lambda>Ì  s   ø€ °$·/±/À#Ç-Á-Ó2P€ rL   rc  )rg  ÚBaseGlyphRecordré   rê  r�  s    `rM   rÐ  zBaseGlyphRecordArray.preWriteÊ  s1   ø€ Ü%Ø× Ñ Ó&Pô 
ˆÔð �}‰}×!Ñ!Ó#Ð#rL   Nr  rK   rL   rM   rÇ  rÇ  É  ó   „ ó$rL   rÇ  c                   ó   — e Zd Zd„ Zy)r–  c                 óv   ‡— t        | j                  ˆfd„¬«      | _        | j                  j                  «       S )Nc                 ó:   •— ‰j                  | j                  «      S r†   rÊ  rË  s    €rM   rf   z(BaseGlyphList.preWrite.<locals>.<lambda>Ô  s   ø€ °t·±ÀsÇ}Á}Ó7U€ rL   rc  )rg  r—  ré   rê  r�  s    `rM   rÐ  zBaseGlyphList.preWriteÒ  s1   ø€ Ü$*Ø×%Ñ%Ó+Uô%
ˆÔ!ð �}‰}×!Ñ!Ó#Ð#rL   Nr  rK   rL   rM   r–  r–  Ñ  rÍ  rL   r–  c                   ó    — e Zd ZdZdZd„ Zd„ Zy)ÚClipBoxFormatr   r+   c                 ó   — | | j                   u S r†   ©ÚVariablerˆ   s    rM   Úis_variablezClipBoxFormat.is_variableÝ  s   € Ø�t—}‘}Ð$Ð$rL   c                 ó   — | j                   S r†   rÔ  rˆ   s    rM   Úas_variablezClipBoxFormat.as_variableà  s   € Ø�}‰}ÐrL   N)r8   r9   r:   ÚStaticrÕ  rÖ  rØ  rK   rL   rM   rÒ  rÒ  Ù  s   „ Ø€FØ€Hò%órL   rÒ  c                   ó   — e Zd ZeZd„ Zd„ Zy)ÚClipBoxc                 óH   ‡ — t        ˆ fd„‰ j                  «       D «       «      S )Nc              3   óJ   •K  — | ]  }t        ‰|j                  «      –— Œ y ­wr†   )rÅ   rÌ   )rž   r�  r‰   s     €rM   rŸ   z#ClipBox.as_tuple.<locals>.<genexpr>è  s   øè ø€ ÒO°$”W˜T 4§9¡9×-ÑOùs   ƒ #)rª   rˆ  rˆ   s   `rM   Úas_tuplezClipBox.as_tupleç  s   ø€ ÜÓO¸$×:LÑ:LÓ:NÔOÓOÐOrL   c                 óR   — | j                   j                  › | j                  «       › �S r†   )r£  r8   rÞ  rˆ   s    rM   Ú__repr__zClipBox.__repr__ê  s#   € Ø—.‘.×)Ñ)Ð*¨4¯=©=«?Ð*;Ð<Ð<rL   N)r8   r9   r:   rÒ  Ú
formatEnumrÞ  rà  rK   rL   rM   rÛ  rÛ  ä  s   „ Ø€JòPó=rL   rÛ  c                   ó4   — e Zd Zdd„Zd„ Zd„ Zd„ Zd	d„Zd„ Zy)
r”  Nc                 ó,   — t        | d«      si | _        y y )Nr�  )r°  r�  r•   s     rM   r‡   zClipList.populateDefaultsï  s   € Ü�t˜WÔ%ØˆD�Jð &rL   c           	      ó¸  — i }|j                  «       }t        |d   «      D �]  \  }}|j                  |j                  kD  r-t        j                  d||j                  |j                  «       ŒMg }g }t        |j                  |j                  dz   «      D ]@  }		 ||	   }
|
|vr#t        j                  |j                  «      ||
<   Œ0|j                  |	«       ŒB |r*t        j                  d|t        |«      t        |«      «       |sŒæt        j                  d|t        |«      t        |«      «       �Œ || _        y # t        $ r |j                  |	«       Y ŒÃw xY w)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])rø  rù   ÚStartGlyphIDÚ
EndGlyphIDr¹  rº  rh  Ú
IndexErrorrÂ   rê  rÛ  Úminrá  r�  )r‰   r¾  r®   r�  r¦   r}   rL  ÚredefinedGlyphsÚmissingGlyphsr±   r•  s              rM   rÅ  zClipList.postReadó  sX  € ØˆØ×'Ñ'Ó)ˆ
Ü ¨Ñ 6Ó7ó %	‰FˆAˆsØ×Ñ #§.¡.Ò0Ü—‘ð/àØ×$Ñ$Ø—N‘Nôð Ø ˆOØˆMÜ  ×!1Ñ!1°3·>±>ÀAÑ3EÓFò 	4�ðØ& wÑ/�Eð  Ñ%Ü#'§9¡9¨S¯[©[Ó#9�E˜%’Là#×*Ñ*¨7Õ3ð	4ñ Ü—‘ð8ð Ü˜Ó(Ü˜Ó(ôò Ü—‘ØSØÜ˜Ó&Ü˜Ó&ö	ðA%	ðL ˆ�
øô/ "ò Ø!×(Ñ(¨Ô1Ùðús   ÂD<Ä<EÅEc                 ó0  — t        t        «      }i }| j                  j                  «       D ]3  \  }}|j	                  «       }||   j                  |«       ||vsŒ/|||<   Œ5 |j                  «       D ��ci c]  \  }}t        |«      ||   “Œ c}}S c c}}w r†   )r   r  r�  r¬   rÞ  rÂ   Ú	frozenset)r‰   ÚglyphsByClipÚuniqueClipsr�   rž  rd  r�  s          rM   ÚgroupszClipList.groups  s¢   € Ü"¤4Ó(ˆØˆØ"&§*¡*×"2Ñ"2Ó"4ò 	+ÑˆI�wØ×"Ñ"Ó$ˆCØ˜Ñ×$Ñ$ YÔ/Ø˜+Ò%Ø#*�˜CÒ ð		+ð DP×CUÑCUÓCW÷
Ù4?°C¸ŒI�fÓ˜{¨3Ñ/Ñ/ó
ð 	
ùó 
s   Á5Bc                 ót  ‡— t        | d«      si | _        i }|j                  «       Š| j                  «       j	                  «       D ]Œ  \  }}t        ˆfd„|D «       «      }|sŒ|d   }|gg}|dd  D ]2  }||dz   k7  r&|d   j                  |«       |j                  |g«       |}Œ4 |d   j                  |«       |D ]  \  }	}
|	|
f|vsJ ‚|||	|
f<   Œ ŒŽ g }t        |j	                  «       «      D ]8  \  \  }	}
}t        «       }|	|_        |
|_	        ||_
        |j                  |«       Œ: t        |«      |dœ}|S )Nr�  c              3   ó2   •K  — | ]  }|‰v sŒ‰|   –— Œ y ­wr†   rK   )rž   r�   ÚglyphMaps     €rM   rŸ   z$ClipList.preWrite.<locals>.<genexpr>0  s"   øè ø€ ò Ø(1¸yÈHÒ?T�˜Õ#ñùs   ƒ	�
r   r   rÇ  )Ú	ClipCountrå  )r°  r�  ÚgetReverseGlyphMaprð  r¬   rg  rÂ   rå  ræ  rç  rÛ  r¨   )r‰   r®   ÚclipBoxRangesr�  rž  rÎ  ru  r¿  r±   rš  rÂ  ÚclipRecordsÚrecordr¾  ró  s                 @rM   rÐ  zClipList.preWrite*  s{  ø€ Ü�t˜WÔ%ØˆDŒJØˆØ×*Ñ*Ó,ˆØ#Ÿ{™{›}×2Ñ2Ó4ò 	6‰OˆF�GÜó Ø5;ôó ˆHñ ØØ˜A‘;ˆDØ�f�XˆFØ# A B˜<ò �Ø˜d Q™hÒ&Ø˜2‘J×%Ñ% dÔ+Ø—M‘M 7 )Ô,Ø‘ð	ð
 �2‰J×Ñ˜dÔ#Ø$ò 6‘
��sØ˜s�|¨=Ñ8Ð8Ð8Ø.5�˜u c˜lÒ+ñ6ð	6ð$ ˆÜ%+¨M×,?Ñ,?Ó,AÓ%Bò 	'Ñ!‰LˆU�C˜'Ü“\ˆFØ"'ˆFÔØ #ˆFÔØ$ˆFŒNØ×Ñ˜vÕ&ð	'ô ˜[Ó)Ø%ñ
ˆð ˆrL   c                 ó*  — |r|n| j                   j                  }|€g }t        | d«      r|j                  d| j                  f«       |j                  ||«       |j                  «        t        | j                  «       j                  «       d„ ¬«      D ]Ü  \  }}|j                  d«       |j                  «        t        |«      D ]%  }|j                  d|¬«       |j                  «        Œ' |j                  dd|j                  fg«       |j                  «        |j                  ||«       |j                  d«       |j                  «        |j                  d«       |j                  «        ŒÞ |j                  |«       |j                  «        y )Nr¸  c                 ó   — t        | d   «      S )Nr   )ré  )r#  s    rM   rf   z ClipList.toXML.<locals>.<lambda>X  s   € ´C¸¸Q¹³L€ rL   rc  ÚCliprÒ  r  rÛ  )r£  r8   r°  rÂ   r¸  rÑ   rË   rg  rð  r¬   rÊ   rÓ  rÔ   )	r‰   rú   r®   rÍ   rÌ   Ú	tableNamer�  rž  r�   s	            rM   r×   zClipList.toXMLN  s]  € Ù ‘D d§n¡n×&=Ñ&=ˆ	Øˆ=ØˆEÜ�4˜Ô"Ø�L‰L˜( D§K¡KÐ0Ô1Ø×Ñ˜9 eÔ,Ø×ÑÔä%Ø�K‰K‹M×ÑÓ!Ñ'@ô 
ò 	 ‰OˆF�Gð ×Ñ˜vÔ&Ø×ÑÔÜ# F›^ò $�	Ø×#Ñ# G°9Ð#Ô=Ø×!Ñ!Õ#ð$ð ×Ñ˜y¨H°g·n±nÐ+EÐ*FÔGØ×ÑÔØ�N‰N˜9 dÔ+Ø×Ñ˜YÔ'Ø×ÑÔØ×Ñ˜VÔ$Ø×ÑÕð	 ð 	×Ñ˜Ô#Ø×ÑÕrL   c                 ó‚  — t        | dd «      }|€	i x| _        }|dk(  sJ ‚g }d }|D ]ˆ  }t        |t        «      sŒ|\  }}}|dk(  r|j	                  |d   «       Œ4|dk(  sŒ:t        «       }t        |d   «      |_        |D ]-  }t        |t        «      sŒ|\  }}}|j                  ||||«       Œ/ ŒŠ |r|D ]  }	|||	<   Œ	 y y )Nr�  rû  rÒ  r¶   rÛ  r¸  )	rÅ   r�  rÜ   rª   rÂ   rÛ  r   r¸  rà   )
r‰   rÌ   rÍ   rÞ   r®   r�  r�  rž  Úelemr�   s
             rM   rà   zClipList.fromXMLi  sö   € Ü˜˜g tÓ,ˆØˆ=Ø!#Ð#ˆDŒJ˜Ø�vŠ~Ðˆ~ØˆØˆØò 	@ˆDÜ˜d¤EÔ*ØØ#'Ñ ˆD�%˜Ø�wŠØ—‘˜e G™nÕ-Ø˜Ó"Ü!›)�Ü!)¨%°©/Ó!:�”Ø#ò @�DÜ% d¬EÔ2Ø Ø+/Ñ(�D˜% Ø—O‘O D¨%°¸$Õ?ñ	@ð	@ñ Ø#ò +�	Ø#*��iÒ ñ+ð rL   r†   r
  )	r8   r9   r:   r‡   rÅ  rð  rÐ  r×   rà   rK   rL   rM   r”  r”  î  s"   „ óò)òV

ò"óHó6+rL   r”  c                   ó   — e Zd ZdZdZdZy)Ú
ExtendModer   r   r+   N)r8   r9   r:   ÚPADÚREPEATÚREFLECTrK   rL   rM   r   r   ƒ  s   „ Ø
€CØ€FØ�GrL   r   c                   ó|   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZy)ÚCompositeModer   r   r+   rm   r,   r{   r  r   r-   r!  rU   r"  rS   r#  r›   r$  r.   é   é   é   é   é   é   é   rz   é   é   é   N)r8   r9   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_LUMINOSITYrK   rL   rM   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Ø�NrL   r  c                   ó˜   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!„ Z#d"„ Z$y#)$ÚPaintFormatr   r+   rm   r,   r{   r  r   r-   r!  rU   r"  rS   r#  r›   r$  r.   r  r  r  r	  r
  r  r  rz   r  r  r  é   é   é   rŽ  r/   c                 ó8   — | j                   j                  d«      S )NÚPaintVar)rÌ   Ú
startswithrˆ   s    rM   rÖ  zPaintFormat.is_variableÌ  s   € Ø�y‰y×#Ñ# JÓ/Ð/rL   c                 óŒ   — | j                  «       r| S 	 t        j                  d| j                  dd  › �   S # t        $ r Y y w xY w)Nr2  r{   )rÖ  r-  Ú__members__rÌ   ÚKeyErrorrˆ   s    rM   rØ  zPaintFormat.as_variableÏ  sL   € Ø×ÑÔØˆKð	Ü×*Ñ*¨X°d·i±iÀÀ°m°_Ð+EÑFÐFøÜò 	Ùð	ús   ”"7 ·	AÁAN)%r8   r9   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ÚPaintCompositerÖ  rØ  rK   rL   rM   r-  r-  ª  s¾   „ Ø€OØ€JØ€MØÐØÐØÐØÐØÐØÐØ€JØ€NØ€NØÐØ€NØÐØ€JØ€MØÐØ "ÐØÐØÐØ$&Ð!Ø')Ð$Ø€KØ€NØ ÐØ!#ÐØ€IØ€LØÐØ!ÐØ€Nò0órL   r-  c            
       ó”   — e Zd ZeZd„ Zdd„Zdedee	j                     fd„Zded    fd„Zdefd„Zdefd	„Z	 dded
ddedee   fd„Zy)r˜  c                 ó˜   — 	 | j                  | j                  «      j                  S # t        $ r t	        d| j                  › �«      ‚w xY w)NzUnknown Paint format: )rá  r¸  rÌ   r­  ÚNotImplementedErrorrˆ   s    rM   ÚgetFormatNamezPaint.getFormatNameÛ  sI   € ð	NØ—?‘? 4§;¡;Ó/×4Ñ4Ð4øÜò 	NÜ%Ð(>¸t¿{¹{¸mÐ&LÓMÐMð	Nús	   ‚$' §"A	Nc                 ób  — |r|n| j                   j                  }|€g }|j                  d| j                  f«       |j	                  ||«       |j                  | j                  «       «       |j                  «        | j                  ||«       |j                  |«       |j                  «        y )Nr¸  )
r£  r8   rÂ   r¸  rÑ   r5  rZ  rË   rÓ  rÔ   )r‰   rú   r®   rÍ   rÌ   rü  s         rM   r×   zPaint.toXMLá  s�   € Ù ‘D d§n¡n×&=Ñ&=ˆ	Øˆ=ØˆEØ�‰�h §¡Ð,Ô-Ø×Ñ˜9 eÔ,Ø×Ñ˜$×,Ñ,Ó.Ô/Ø×ÑÔØ�‰�I˜tÔ$Ø×Ñ˜Ô#Ø×ÑÕrL   ÚcolrÚreturnc              #   ó$  K  — | j                   t        j                  k(  rcg }|j                  �|j                  j                  }d„ t        || j                  | j                  | j                  z    «      D «       E d {  –—†  y | j                   t        j                  k(  rq|j                  j                  D ]@  }|j                  | j                  k(  sŒt        j                  d|j                  ¬«      –—  y  t        | j                  ›d�«      ‚| j!                  «       D ]h  }|j"                  €Œt%        |j"                  t'        | «      «      sŒ0t)        | |j*                  «      }t        j                  |j*                  |¬«      –— Œj y 7 �Œ­w)Nc              3   óR   K  — | ]  \  }}t        j                  d ||¬«      –— Œ! y­w)ÚLayers)rÌ   r¶   rø   N)r   ÚSubTableEntry)rž   r}   re   s      rM   rŸ   z+Paint.iterPaintSubTables.<locals>.<genexpr>ó  s.   è ø€ ò á�A�qô ×'Ñ'¨X¸QÀa×HÐHñùs   ‚%'rœ  )rÌ   r¶   z not in colr.BaseGlyphList)r¸  r-  r7  Ú	LayerListr˜  rù   ÚFirstLayerIndexÚ	NumLayersrA  r–  r—  rœ  rÒ  r   ra  r6  rˆ  Ú
tableClassÚ
issubclassrç   rÅ   rÌ   )r‰   r\  Úlayersrø  r�  r¶   s         rM   ÚiterPaintSubTableszPaint.iterPaintSubTablesí  sL  è ø€ Ø�;‰;œ+×5Ñ5Ò5àˆFØ�~‰~Ð)ØŸ™×-Ñ-�ñä%Ø˜4×/Ñ/°$×2FÑ2FÈÏÉÑ2WÐXóô÷ ð ð à�;‰;œ+×4Ñ4Ò4Ø×,Ñ,×AÑAò L�Ø×#Ñ# t§z¡zÓ1Ü#×1Ñ1°{È&Ï,É,ÔWÒWÙðLô
  $§*¡* Ð/IÐJÓKÐKà×&Ñ&Ó(ò 	KˆDØ�‰Ñ*¬z¸$¿/¹/Ì4ÐPTË:Õ/VÜ  d§i¡iÓ0�Ü×-Ñ-°4·9±9ÀEÔJÓJñ	Kð!ûs&   ‚A;FÁ=FÁ>AFÃAFÄ1FÅ=Fc                 ó^   — | j                  |«      D �cg c]  }|j                  ‘Œ c}S c c}w r†   )rh  r¶   )r‰   r\  Úps      rM   ÚgetChildrenzPaint.getChildren  s%   € à!%×!8Ñ!8¸Ó!>Ö?˜A�—“Ò?Ð?ùÒ?s   ”*c                 óŠ   ‡— t        |«      st        d«      ‚t        | ˆfd„¬«      D ]  }|d   j                  } ||«       Œ y)zEDepth-first traversal of graph rooted at self, callback on each node.zcallback must be callablec                 ó&   •— | j                  ‰«      S r†   ©rh  ©Úpaintr\  s    €rM   rf   z Paint.traverse.<locals>.<lambda>  ó   ø€ °%×2JÑ2JÈ4Ó2P€ rL   ©Úiter_subtables_fnrÇ  N)ÚcallableÚ	TypeErrorr
   r¶   )r‰   r\  ÚcallbackÚpathrp  s    `   rM   ÚtraversezPaint.traverse  sG   ø€ ä˜Ô!ÜÐ7Ó8Ð8ä"ØÓ$Pô
ò 	ˆDð ˜‘H—N‘NˆEÙ�U�Oñ		rL   c                 óÔ  — | j                   t        j                  k(  rX| j                  }t        |j                  |j
                  |j                  |j                  |j                  |j                  «      S | j                   t        j                  k(  r*t        j                  | j                  | j                  «      S | j                   t        j                  k(  r*t        j                  | j                  | j                   «      S | j                   t        j"                  k(  rtt        j                  | j$                  | j&                  «      j                  | j                  | j                   «      j                  | j$                   | j&                   «      S | j                   t        j(                  k(  rt        j                  | j                  «      S | j                   t        j*                  k(  rit        j                  | j$                  | j&                  «      j                  | j                  «      j                  | j$                   | j&                   «      S | j                   t        j,                  k(  r(t        j.                  t1        | j2                  «      «      S | j                   t        j4                  k(  rrt        j                  | j$                  | j&                  «      j/                  t1        | j2                  «      «      j                  | j$                   | j&                   «      S | j                   t        j6                  k(  r=t        j8                  t1        | j:                   «      t1        | j<                  «      «      S | j                   t        j>                  k(  r‡t        j                  | j$                  | j&                  «      j9                  t1        | j:                   «      t1        | j<                  «      «      j                  | j$                   | j&                   «      S t        | j                   «      jA                  «       rtC        d| j                   › �«      ‚t        S )NzVariable Paints not supported: )"r¸  r-  rB  r   ÚxxÚyxÚxyÚyyÚdxÚdyrD  r   Ú	translaterF  rQ   rY   rZ   rH  ÚcenterXÚcenterYrJ  rL  rN  Úrotater   ÚanglerP  rR  ÚskewÚ
xSkewAngleÚ
ySkewAnglerT  rÖ  rY  )r‰   r;  s     rM   ÚgetTransformzPaint.getTransform  sÔ  € Ø�;‰;œ+×4Ñ4Ò4Ø—‘ˆAÜ˜QŸT™T 1§4¡4¨¯©¨q¯t©t°Q·T±T¸1¿4¹4Ó@Ð@Ø�[‰[œK×6Ñ6Ò6Ü×%Ñ% d§g¡g¨t¯w©wÓ7Ð7Ø�[‰[œK×2Ñ2Ò2Ü—>‘> $§+¡+¨t¯{©{Ó;Ð;Ø�[‰[œK×>Ñ>Ò>ä×"Ñ" 4§<¡<°·±Ó>ß‘�t—{‘{ D§K¡KÓ0ß‘˜DŸL™L˜=¨4¯<©<¨-Ó8ðð
 �[‰[œK×9Ñ9Ò9Ü—>‘> $§*¡*Ó-Ð-Ø�[‰[œK×EÑEÒEä×"Ñ" 4§<¡<°·±Ó>ß‘�t—z‘zÓ"ß‘˜DŸL™L˜=¨4¯<©<¨-Ó8ðð
 �[‰[œK×3Ñ3Ò3Ü—?‘?¤7¨4¯:©:Ó#6Ó7Ð7Ø�[‰[œK×?Ñ?Ò?ä×"Ñ" 4§<¡<°·±Ó>ß‘œ §
¡
Ó+Ó,ß‘˜DŸL™L˜=¨4¯<©<¨-Ó8ðð
 �[‰[œK×1Ñ1Ò1Ü—=‘=¤¨$¯/©/Ð)9Ó!:¼GÀDÇOÁOÓ<TÓUÐUØ�[‰[œK×=Ñ=Ò=ä×"Ñ" 4§<¡<°·±Ó>ß‘”g˜tŸ™Ð.Ó/´¸¿¹Ó1IÓJß‘˜DŸL™L˜=¨4¯<©<¨-Ó8ðô
 �t—{‘{Ó#×/Ñ/Ô1Ü%Ð(GÈÏÉÀ}Ð&UÓVÐVäˆrL   r�  r(   r‘  c                 ó  ‡— t        |«      }t        | ˆfd„¬«      D ]}  }|d   j                  }|j                  t        j
                  k(  sŒ0t        t        j                  d„ |D «       t        «      }||j                     j                  t        ||«      «       Œ |j                  €y t        «       }t        t         j"                  «      |_        t%        |j                  |«      \  |_        |_        |_        |_        |S )Nc                 ó&   •— | j                  ‰«      S r†   rn  ro  s    €rM   rf   z&Paint.computeClipBox.<locals>.<lambda>G  rq  rL   rr  rÇ  c              3   óP   K  — | ]  }|j                   j                  «       –— Œ  y ­wr†   )r¶   rˆ  )rž   r¯  s     rM   rŸ   z'Paint.computeClipBox.<locals>.<genexpr>M  s   è ø€ Ò<°�R—X‘X×*Ñ*×,Ñ<ùs   ‚$&)r   r
   r¶   r¸  r-  r@  r   r   r”   r   rÒ  Údrawr   ÚboundsrÛ  r7  rÒ  rÙ  r   ÚxMinÚyMinÚxMaxÚyMax)	r‰   r\  r�  r‘  Úpenrw  rp  ÚtransformationÚcbs	    `       rM   r™  zPaint.computeClipBoxB  sØ   ø€ ô ˜xÓ(ˆÜ"ØÓ$Pô
ò 
	NˆDð ˜‘H—N‘NˆEØ�|‰|œ{×5Ñ5Ó5Ü!'Ü×'Ñ'Ù<°tÔ<Üó"�ð
 ˜Ÿ™Ñ%×*Ñ*¬<¸¸^Ó+LÕMð
	Nð �:‰:ÐØä‹YˆÜœ×,Ñ,Ó-ˆŒ	Ü-9¸#¿*¹*ÀlÓ-SÑ*ˆŒ�”˜"œ' 2¤7Øˆ	rL   r
  r¢  )r8   r9   r:   r-  rá  rZ  r×   rƒ  r$   r   ra  rh  r%   rk  rx  r   rˆ  r7  r&   rÛ  r™  rK   rL   rM   r˜  r˜  Ø  s�   „ Ø€JòNó
ðK tð K°¸×9PÑ9PÑ0Qó Kð6@ 4¨¡=ó @ð	˜Tó 	ð)˜ió )ðX HIñØðØ$1ðØADðà	�'Ñ	ôrL   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                 ó   — d}|j                   }|j                  €|dz
  }|dk  r|S |j                  dk(  rd}n|j                  dk(  rd}| |j                     j                  j                  j
                  }||   }|j                  d   j                  j                  k(  r8|dz
  }|dk  r|S ||   }|j                  d   j                  j                  |k(  rŒ8t        |t        |«      «      D ]Š  }||   }|j                  |k7  sŒ||_        t        t        |j                  «      «      D ]K  }|j                  |   }t        |j                     |   }	 |	«       }
d|
_        ||
_        |
|j                  |<   ŒM ŒŒ d}|S )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£  Ú
LookupTyperh  r¨   ÚlookupTypesr¸  ÚExtSubTable)ÚttfÚoverflowRecordÚokr¿  ÚextTypeÚlookupsÚlookupÚsiÚsubTableÚextSubTableClassÚextSubTables              rM   ÚfixLookupOverFlowsrì  ¶  s‘  € ð8 
€BØ ×0Ñ0€KØ×#Ñ#Ð+Ø! A‘oˆØ�Q‚Øˆ	Ø×Ñ 6Ò)Ø‰Ø	×	!Ñ	! VÒ	+Øˆà�.×*Ñ*Ñ+×1Ñ1×<Ñ<×CÑC€GØ�[Ñ!€Fà
�/‰/˜!Ñ
×
&Ñ
&×
1Ñ
1°WÒ
<Ø! A‘oˆØ˜Š?ØˆIØ˜Ñ%ˆð	 �/‰/˜!Ñ
×
&Ñ
&×
1Ñ
1°WÓ
<ô ˜[¬#¨g«,Ó7ò 
2ˆØ˜Ñ%ˆØ×Ñ Ó'Ø 'ˆFÔÜœC §¡Ó0Ó1ò 2�Ø!Ÿ?™?¨2Ñ.�Ü#.¨~×/GÑ/GÑ#HÈÑ#QÐ Ù.Ó0�Ø%&�Ô"Ø*2�Ô'Ø&1�—‘ Ò#ñ2ð	
2ð 
€BØ€IrL   c                 óL  — d}t        | j                  j                  «       «      }t        |«      }|j                  dv r|dz  }n|j                  dk(  r|j
                  dz
  }i |_        t        |«      D ]+  }||   }|d   }	|d   |j                  |	<   | j                  |	= Œ- |S )Nr   ©r®  r³  r+   r.  r   )rg  rÖ   r¬   r¨   ÚitemNameÚ	itemIndexrh  )
ÚoldSubTableÚnewSubTablerã  rä  Ú
oldMappingÚoldLenÚnewLenr}   r#  rd  s
             rM   ÚsplitMultipleSubströ  õ  s¼   € Ø	
€BÜ˜×+Ñ+×1Ñ1Ó3Ó4€JÜ�‹_€Fà×ÑÐ"=Ñ=ð ˜1‘‰à	×	 Ñ	  JÒ	.ð  ×)Ñ)¨AÑ-ˆà€KÔÜ�6˜6Ó"ò %ˆØ˜!‰}ˆØ�1‰gˆØ#'¨¡7ˆ×Ñ˜CÑ Ø×Ñ Ñ$ð	%ð €IrL   c                 ó†  — d}t        | d«      r| j                  |_        t        | j                  j	                  «       «      }t        |«      }|j                  dv r|dz  }n|j                  dk(  r|j                  dz
  }i |_        t        |«      D ]+  }||   }|d   }	|d   |j                  |	<   | j                  |	= Œ- |S )Nr   rf  rî  r+   ra  r   )	r°  rf  rg  r_  r¬   r¨   rï  rð  rh  )
rñ  rò  rã  rä  ÚoldAltsrô  rõ  r}   r#  rd  s
             rM   ÚsplitAlternateSubstrù  	  sÕ   € Ø	
€BÜˆ{Ð.Ô/Ø'2×'CÑ'CˆÔ$ä�[×+Ñ+×1Ñ1Ó3Ó4€GÜ�‹\€Fà×ÑÐ"=Ñ=ð ˜1‘‰à	×	 Ñ	  NÒ	2ð  ×)Ñ)¨AÑ-ˆà€KÔÜ�6˜6Ó"ò (ˆØ�q‰zˆØ�1‰gˆØ&*¨1¡gˆ×Ñ˜sÑ#Ø×"Ñ" 3Ñ'ð	(ð €IrL   c                 óL  — d}t        | j                  j                  «       «      }t        |«      }|j                  dv r|dz  }n|j                  dk(  r|j
                  dz
  }i |_        t        |«      D ]+  }||   }|d   }	|d   |j                  |	<   | j                  |	= Œ- |S )Nr   rî  r+   ro  r   )rg  rm  r¬   r¨   rï  rð  rh  )
rñ  rò  rã  rä  ÚoldLigsrô  rõ  r}   r#  rd  s
             rM   ÚsplitLigatureSubstrü  ,	  s¼   € Ø	
€BÜ�[×*Ñ*×0Ñ0Ó2Ó3€GÜ�‹\€Fà×ÑÐ"=Ñ=ð ˜1‘‰à	×	 Ñ	  MÒ	1ð  ×)Ñ)¨AÑ-ˆà€KÔÜ�6˜6Ó"ò 'ˆØ�q‰zˆØ�1‰gˆØ%)¨!¡Wˆ×Ñ˜cÑ"Ø×!Ñ! #Ñ&ð	'ð €IrL   c           	      óô  ‡— | }d}| j                   |_         | j                   dk(  �rt        | j                  «      dkD  rëdD ]  }t        ||t	        | |«      «       Œ | j
                  j                  «       |_        | j
                  j                  }| j                  }t        | j                  «      dz  Š|d ‰ | j
                  _        |d ‰ | _        |‰d  |j
                  _        |‰d  |_        t        | j                  «      | _        t        |j                  «      |_        d}|S | j                   dk(  �r(t        | j                  «      dkD  �rt        | d«      s't        | j                  d   j                  «      | _        dD ]  }t        ||t	        | |«      «       Œ d| _        | j
                  j                  «       |_        | j                  j                  «       |_        | j
                  j                  }| j                  j                  }| j                  }t        | j                  «      dz  Št!        ˆfd	„|j#                  «       D «       «      }	|D �
cg c]	  }
|
|	vsŒ|
‘Œ c}
| j
                  _        |j#                  «       D ��ci c]  \  }}|‰k  sŒ||“Œ c}}| j                  _        |d ‰ | _	        |D �
cg c]	  }
|
|	v sŒ|
‘Œ c}
|j
                  _        |j#                  «       D ��ci c]  \  }}|‰kD  sŒ||‰z
  “Œ c}}|j                  _        |‰d  |_	        t        | j                  «      | _        t        |j                  «      |_        d}|S c c}
w c c}}w c c}
w c c}}w )
NFr   )ÚValueFormat1ÚValueFormat2r+   TÚClass2Countr   )r   r¥  rþ  rÿ  c              3   ó4   •K  — | ]  \  }}|‰k\  sŒ|–— Œ y ­wr†   rK   )rž   Úkre   ÚoldCounts      €rM   rŸ   zsplitPairPos.<locals>.<genexpr>w	  s   øè ø€ ÒI™d˜a ¸1À»=œÑIùs   ƒ‘)r¸  r¨   ÚPairSetr­   rÅ   r®  r£  r�  ÚPairSetCountÚClass1Recordr°  ÚClass2Recordr   Ú	DontSharer¤  rA  re  r¬   ÚClass1Count)rñ  rò  rã  r¯  rä  rÌ   ÚcoveragerK  rA  Ú	newGlyphsr–  r  re   r  s                @rM   ÚsplitPairPosr  F	  s8  ø€ Ø	€BØ	€BØ$×+Ñ+€KÔØ×Ñ˜QÓ¤3 {×':Ñ':Ó#;¸aÒ#?Ø2ò 	CˆDÜ�K ¤w¨{¸DÓ'AÕBð	Cð
  +×3Ñ3×=Ñ=Ó?ˆÔà×'Ñ'×.Ñ.ˆØ×%Ñ%ˆä�{×*Ñ*Ó+¨qÑ0ˆà&.¨y°Ð&9ˆ×ÑÔ#Ø% i xÐ0ˆÔà&.¨x¨yÐ&9ˆ×ÑÔ#Ø% h iÐ0ˆÔä#& {×':Ñ':Ó#;ˆÔ Ü#& {×':Ñ':Ó#;ˆÔ àˆðT €IðQ 
×	Ñ	˜qÓ	 ¤S¨×)AÑ)AÓ%BÀQÓ%FÜ�{ MÔ2Ü&)¨+×*BÑ*BÀ1Ñ*E×*RÑ*RÓ&SˆKÔ#ØNò 	CˆDÜ�K ¤w¨{¸DÓ'AÕBð	Cð !%ˆÔð  +×3Ñ3×=Ñ=Ó?ˆÔØ +× 5Ñ 5× ?Ñ ?Ó AˆÔà×'Ñ'×.Ñ.ˆØ×)Ñ)×3Ñ3ˆ	Ø×*Ñ*ˆä�{×/Ñ/Ó0°AÑ5ˆÜÓI i§o¡oÓ&7ÔIÓIˆ	à2:Ö&Q¨Q¸aÀyÒ>P¢qÒ&Qˆ×ÑÔ#à&Ÿ_™_Ó.÷+
Ù�Q˜°!°h³,ˆAˆq‰Dó+
ˆ×ÑÔ'ð $+¨9¨HÐ#5ˆÔ à2:Ö&M¨Q¸aÀ9ºn¢qÒ&Mˆ×ÑÔ#à*3¯/©/Ó*;÷+
Ù"& ! Q¸qÀ8»|ˆA��H‘Ñó+
ˆ×ÑÔ'ð $+¨8¨9Ð#5ˆÔ ä"% k×&>Ñ&>Ó"?ˆÔÜ"% k×&>Ñ&>Ó"?ˆÔàˆà€Iùò# 'Rùó+
ùò
 'Nùó+
s0   É	M$É)M$ÊM)Ê M)Ë	M/ËM/Ë9M4ÌM4c                 ó^  — | j                   }|dk  ry|dz  }||z
  }g g }}g g }	}t        | j                  j                  | j                  j
                  «      D ]n  \  }
}|j                  |k  r#|j                  |
«       |j                  |«       Œ8|xj                  |z  c_        |j                  |
«       |	j                  |«       Œp g g }}| j                  j                  D ]l  }|j                  «       |j                  «       }}|j                  d | |_        |j                  |d  |_        |j                  |«       |j                  |«       Œn | j                  |_        || j                  _        | j                  j                  «       |_        ||j                  _        | j                  |_        || _         ||_         || j                  _        | j                  j                  «       |_        |	|j                  _        t        |«      | j                  _        t        |	«      |j                  _        || j                  _	        | j                  j                  «       |_        ||j                  _	        t        |«      | j                  _        t        |«      |j                  _        y)Nr+   FT)Ú
ClassCountrú  r—  r�  rÎ  Ú
MarkRecordrG  rÂ   Ú	BaseArrayÚ
BaseRecordr£  r­  r¸  r˜  r¨   Ú	MarkCountÚ	BaseCount)rñ  rò  rã  Ú
classCountÚoldClassCountÚnewClassCountÚoldMarkCoverageÚoldMarkRecordsÚnewMarkCoverageÚnewMarkRecordsr�   Ú
markRecordÚoldBaseRecordsÚnewBaseRecordsrL  ÚoldBaseRecordÚnewBaseRecords                    rM   ÚsplitMarkBasePosr   �	  s`  € à×'Ñ'€JØ�A‚~àà !‘O€MØ Ñ.€Mà&(¨"�^€OØ&(¨"�^€OÜ!$Ø× Ñ ×'Ñ'¨×)>Ñ)>×)IÑ)Ió"ò 	.Ñˆ	�:ð ×Ñ˜mÒ+Ø×"Ñ" 9Ô-Ø×!Ñ! *Õ-à×Ò Ñ-ÕØ×"Ñ" 9Ô-Ø×!Ñ! *Õ-ð	.ð &(¨�N€NØ×$Ñ$×/Ñ/ò -ˆØ'*§}¡}£¸¿¹»�}ˆØ#&§>¡>°.°=Ð#AˆÔ Ø#&§>¡>°-°.Ð#AˆÔ Ø×Ñ˜mÔ,Ø×Ñ˜mÕ,ð-ð %×+Ñ+€KÔà&5€K×ÑÔ#Ø*×7Ñ7×AÑAÓC€KÔØ&5€K×ÑÔ#ð  +×7Ñ7€KÔà*€KÔØ*€KÔà'5€K×ÑÔ$Ø'×1Ñ1×;Ñ;Ó=€KÔØ'5€K×ÑÔ$ä&)¨.Ó&9€K×ÑÔ#Ü&)¨.Ó&9€K×ÑÔ#à'5€K×ÑÔ$Ø'×1Ñ1×;Ñ;Ó=€KÔØ'5€K×ÑÔ$ä&)¨.Ó&9€K×ÑÔ#Ü&)¨.Ó&9€K×ÑÔ#àrL   )r+   rm   r,   )r+   r,   ©r§  r©  c                 ó°  — | |j                      j                  }|j                  j                  |j                     }|j
                  }|j                  |   }t        |d«      sd|_        yt        |d«      r—|j                  j                  j                  }|}|j                  }t        |j                      |j                  j                     } |«       }	|j                  |	_        |	}
t        |j                      |   } |«       }||	_	        n5|j                  j                  }t        |j                      |   } |«       }|}
t        |d«      r|j                  dz   |_        	 t        |j                      |   } ||||«      }|r|j                  j'                  |dz   |
«       |S # t         $ r$ t"        j%                  d|j                   |«       Y yw xY w)zj
    An offset has overflowed within a sub-table. We need to divide this subtable into smaller parts.
    r  Trá  ÚSubTableCountr   z)Don't know how to split %s lookup type %sF)rÞ  r°  r¤  rª  rÜ  rÝ  r«  r°  r  rá  r£  rß  rà  r¸  r#  Ú
splitTabler6  r¹  Úerrorrð  )râ  rã  r°  rç  ÚsubIndexÚsubtableÚsubTableTyperë  ÚnewExtSubTableClassÚnewExtSubTableÚtoInsertÚnewSubTableClassrò  Ú	splitFuncrä  s                  rM   ÚfixSubTableOverFlowsr.  â	  sÍ  € ð �×(Ñ(Ñ)×/Ñ/€EØ×Ñ×$Ñ$ ^×%CÑ%CÑD€FØ×+Ñ+€HØ�‰˜xÑ(€Hô �8˜[Ô)Ø!ˆÔØäˆx˜Ô'ð  ×+Ñ+×5Ñ5×@Ñ@ˆØˆØ×*Ñ*ˆÜ)¨.×*BÑ*BÑCØ×!Ñ!×,Ñ,ñ
Ðñ -Ó.ˆØ +× 2Ñ 2ˆÔØ!ˆä& ~×'?Ñ'?Ñ@ÀÑNÐÙ&Ó(ˆØ%0ˆÕ"à×)Ñ)×4Ñ4ˆÜ& ~×'?Ñ'?Ñ@ÀÑNÐÙ&Ó(ˆØˆäˆv�Ô'Ø%×3Ñ3°aÑ7ˆÔðÜ˜~×7Ñ7Ñ8¸ÑFˆ	ñ 
�8˜[¨.Ó	9€BÙ	Ø�‰×Ñ˜x¨!™|¨XÔ6Ø€Iøô ò Ü�	‰	Ø7Ø×$Ñ$Øô	
ñ
 ðús   Å%F( Æ(*GÇGc                  óŠ  — dd l } ddlm} | j                  d«      }t        «       }|D ]e  \  }}t        }|j                  |«      }|r$|j                  d«      }|d   d   }t        |«      }||vsŒHt        ||fi «      }	|dv rd|	_	        |	||<   Œg |D ]I  \  }}
|j                  d«      sŒt        |«      dkD  sŒ'|dd  |v sŒ/||   }||dd     }||_        ||_        ŒK t        j                  «       D ]  \  }}||   }|D ]  }|||<   Œ	 Œ t         t"        t$        t&        t(        t*        t,        t.        d	œt0        t2        t4        t6        t8        t:        t<        t>        t@        d
œ	dtB        itD        tF        tH        tB        tJ        dœdœa&tL        d   tL        d<   tL        jO                  «       D ]!  }|j                  «       D ]  \  }}	||	_(        Œ Œ# dtR        ia*tW        dd«      D ]  }tX        tT        d|z  <   Œ tW        dd«      D ]  }tZ        tT        d|z  <   Œ ddl.m/} |D ]ž  \  }}|j                  |«      }|rk|ja                  «       \  }}tc        |«      }||   }	te        |	d«      si |	_3        i |	_4         ||dd  |«      \  }}||	jf                  |<   ||	jh                  |<   Œ„||   }	 |||«      \  |	_3        |	_4        Œ  y )Nr   r   )ÚotDataz([A-Za-z0-9]+)Format(\d+)$r!  TÚVarrm   )r   r+   rm   r,   r{   r  r   r-   )	r   r+   rm   r,   r{   r  r   r-   r!  r,   )r   r   r+   r,   r{   )r§  r©  ÚmortÚmorxr©  ÚJSTFÚsizer
  zss%02déd   zcv%02d)ÚbuildConvertersÚ
converters)5Úrer0  rÇ   Úglobalsr   ÚmatchÚgroupr   rç   r  r3  r¨   Ú	NoVarTypeÚVarTypeÚ_equivalentsr¬   r
  r+  r]  rk  ÚContextSubstÚChainContextSubstÚExtensionSubstÚReverseChainSingleSubstÚ	SinglePosÚPairPosÚ
CursivePosÚMarkBasePosÚ
MarkLigPosÚMarkMarkPosÚ
ContextPosÚChainContextPosÚExtensionPosÚNoncontextualMorphÚRearrangementMorphÚContextualMorphÚLigatureMorphÚInsertionMorphrà  r£   rß  r¦  r¢  rh  rª  r¬  ÚotConvertersr7  rð  r7  r°  r8  ÚconvertersByName)r9  r0  Ú	formatPatÚ	namespacerÌ   r°  Ú	baseClassÚmÚ
formatTyperJ  r¸   ÚvarTypeÚ	noVarTypeÚbaserc  rd  Ú
lookupEnumÚenumr}   r7  rÍ  r8  rS  s                          rM   Ú_buildClassesr^  
  s  € ÛÝà—
‘
Ð8Ó9€IÜ“	€Ið ò "‰ˆˆeÜˆ	Ø�O‰O˜DÓ!ˆÙà—7‘7˜1“:ˆDð ˜q™ !™ˆJÜ8¸ÓDˆIØ�yÒ ä�t˜i˜\¨2Ó.ˆCØÐ'Ñ'Ø $�”Ø!ˆI�dŠOð!"ð& ò (‰ˆˆaØ�?‰?˜5Õ!¤c¨$£i°!£m¸¸Q¸R¸ÀIÒ8MØ ‘oˆGØ! $ q r (Ñ+ˆIØ )ˆGÔØ 'ˆIÕð(ô #×(Ñ(Ó*ò "‰
ˆˆdØ˜‰ˆØò 	"ˆCØ!ˆI�cŠNñ	"ð"ô ÜÜÜÜÜ ÜÜ&ñ	
ô ÜÜÜÜÜÜÜÜñ

ð Ô!ð
ô "ÜÜä!Üñ
ñ3!€KôD & fÑ-„K�ÑÜ!×(Ñ(Ó*ò "ˆ
Ø#×)Ñ)Ó+ò 	"‰IˆD�#Ø!ˆC�Nñ	"ð"ð 	Ô!ðÐô �1�fÓò DˆÜ*CÔ˜( Q™,Ò'ðDä�1�fÓò IˆÜ*HÔ˜( Q™,Ò'ðIõ .àò U‰ˆˆeØ�O‰O˜DÓ!ˆÙàŸ8™8›:‰LˆD�&Ü˜“[ˆFØ˜D‘/ˆCÜ˜3 Ô-Ø!#�”Ø')�Ô$Ù+:¸5ÀÀ¸9ÀiÓ+PÑ(ˆJÐ(Ø%/ˆC�N‰N˜6Ñ"Ø+;ˆC× Ñ  Ò(ð ˜D‘/ˆCÙ3BÀ5È)Ó3TÑ0ˆCŒN˜CÕ0ñ!UrL   c                 ó"   — | €g S | j                   S r†   )r�  )r
  s    rM   r  r  �
  s   € ØÐàˆ	à�‰ÐrL   )…Ú__doc__rê  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!   Úloggingrb   ÚarrayÚsysr"   Útypingr#   r$   r%   r&   r'   ÚfontTools.ttLib.ttGlyphSetr(   Ú	getLoggerr8   r¹  r*   rN   r?   r@   rA   rC   rD   rH   rI   rE   rF   r«   rÃ   r¥   r   r‚   r„   rð   Úobjectrý   r  r  r  rB  rO  rT  r�  rŸ  r¦  rª  r¬  r®  r‘   r×  rõ  r  r
  r+  r?  r]  rk  rƒ  r¤  rÇ  r–  rÒ  rÛ  r”  r   r  r-  r˜  r?  rì  rö  rù  rü  r  r   r$  r.  r^  r  rK   rL   rM   ú<module>rx     sV  ðñó Ý Ý Ý Û ß /Ý /Ý @Ý <Ý 2Ý -ß MÑ Mß =Ñ =Ý (Ý 5Ý 4÷õ ÷ó ÷ TÛ Û Û Û 
Ý ß ?Õ ?áÝ6ð €g×Ñ˜Ó!€ô*˜ô *ñ6 'ØÚ7óÐ ñ ,Ø×*Ñ*¨A¨q°!óñ ,Ø×*Ñ*¨A¨q°!óñ *Ð*;×*IÑ*IÈ2ÈsÐTUÓVÙ'Ð(9×(FÑ(FÈÈAÈqÓQÙ'Ð(9×(FÑ(FÈÈAÈqÓQÙ&Ð'8×'DÑ'DÀbÈ$ÐPQÓRÙ&Ð'8×'DÑ'DÀbÈ#ÈqÓQÙ)Ð*;×*JÑ*JÈAÈqÐRSÓTÙ)Ð*;×*JÑ*JÈAÈqÐRSÓTñÐ ñ$ &Ù%Ù)Ù%ñ	€ñ +Ù*Ù2Ù*ñ	€	ò$ò.>÷"vBñ vB÷r.ñ .ôD"�Fô "ôˆvô ô
#�ô #ô*R0˜yô R0ôj>@˜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8ôT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ñ^ „órL   