Ë
    £ehÚ! ã                   óT  — d dl mZmZmZmZm	Z
mZ d dlmZ d dlmZmZ d dlmZmZmZmZmZ d dlmZ d dlmZmZ ddlmZmZm Z m!Z!m"Z" dd	l#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z.m/Z0m1Z1 d d
l2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9Z9d dl:Z:d dl;m<Z< d dl=Z= e=j|                  e?«      Z@d„ ZAd„ ZB G d„ deC«      ZD G d„ deD«      ZE G d„ deE«      ZF G d„ deE«      ZG G d„ deG«      ZH G d„ deG«      ZI G d„ deI«      ZJ G d„ d eFeI«      ZK G d!„ d"eG«      ZL G d#„ d$eG«      ZM G d%„ d&eG«      ZN G d'„ d(eG«      ZO G d)„ d*eG«      ZP G d+„ d,eG«      ZQ G d-„ d.eQeO«      ZR G d/„ d0eQeM«      ZS G d1„ d2eQeI«      ZT G d3„ d4eE«      ZU G d5„ d6eE«      ZV G d7„ d8eV«      ZW G d9„ d:eM«      ZX G d;„ d<eM«      ZY G d=„ d>eE«      ZZ G d?„ d@eZ«      Z[ G dA„ dBeZ«      Z\ G dC„ dDe\«      Z] G dE„ dFe\«      Z^ G dG„ dHe^«      Z_ G dI„ dJe_«      Z` G dK„ dLeE«      Za G dM„ dNeE«      Zb G dO„ dPeD«      Zc G dQ„ dRec«      Zd G dS„ dTec«      Ze G dU„ dVee«      Zf G dW„ dXee«      Zg G dY„ dZec«      Zh G d[„ d\ee«      Zi G d]„ d^efei«      Zj G d_„ d`ee«      Zk G da„ dbeG«      Zl G dc„ ddel«      Zm G de„ dfeD«      Zn G dg„ dheD«      Zo G di„ djeD«      Zp G dk„ dleD«      Zq G dm„ dneD«      Zr G do„ dpeD«      Zs G dq„ dreD«      Zt G ds„ dteD«      Zu G du„ dveD«      Zv G dw„ dx«      Zw G dy„ dzeD«      Zx G d{„ d|eM«      Zy G d}„ d~eO«      Zz G d„ d€ez«      Z- G d�„ d‚ez«      Z/i dƒeN“d„eL“d…eH“d†eO“d‡eM“dˆeP“d‰eI“dŠeb“deJ“d eK“dLea“d4eU“d6eV“d8eW“d:eX“d@e[“dDe]“i dFe^“dHe_“dJe`“d‹ec“dŒee“d�ef“dŽeg“ddem“dret“dteu“dvev“d|ey“d€e-“d‚e/“d<eY“d� e6exew¬�«      “d‘ e6exe%¬’«      “¥eresedededepd“„ d”„ d•„ d–„ d—„ d˜„ d™œ¥Z{y)šé    )ÚfixedToFloatÚfloatToFixedÚfloatToFixedToStrÚstrToFixedToFloatÚensureVersionIsLongÚversionToFixed)ÚTupleVariation)ÚnearestMultipleShortestReprÚotRound)Ú	bytesjoinÚtobytesÚtostrÚpadÚsafeEval)ÚLazyList)ÚOPTIMIZE_FONT_SPEEDÚgetSearchRangeé   )ÚCountReferenceÚFormatSwitchingBaseTableÚOTTableReaderÚOTTableWriterÚValueRecordFactory)ÚlookupTypesÚVarCompositeGlyphÚAATStateTableÚAATStateÚ	AATActionÚContextualMorphActionÚLigatureMorphActionÚInsertionMorphActionÚMorxSubtableÚ
ExtendModeÚCompositeModeÚNO_VARIATION_INDEX)Úzip_longestÚ
accumulate)Úpartial)ÚSimpleNamespaceN)ÚOptionalc                 ó"   — t        | t        «      S ©N)Ú
isinstanceÚtuple)Úts    úa/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/fontTools/ttLib/tables/otConverters.pyú<lambda>r1   -   s   € ”J˜q¤%Ó(€ ó    c           	      óê  — g }i }| D �]æ  \  }}}}}|}	|j                  d«      r|dk(  sJ ‚t        }
nŒ|j                  d«      s|dv rt        t        t
        dœ|   }
na|dk(  rt        }
nU|dk(  rt        }
nI|dk(  rt        }
n=|d	k(  rt        }
n1|d
v rt        }
n&|t        vrd|vr	|}	t        }
nt        ||t        «      }
 |
||||¬«      }|j                  r|j                  }n'|dv r|j                  |«      }n|j                  |	«      }|j                  s||_        |dv rY|d   |_        |j                   j#                  «       D ]2  }|j#                  «       D ]  }t%        ||||«      ||j&                  <   Œ Œ4 |d	k(  rN|d   |_        |d	   |_        |j(                  j#                  «       D ]  }t%        ||||«      ||j&                  <   Œ |j-                  |«       ||vsJ |«       ‚|||<   �Œé ||fS )zÔGiven a table spec from otData.py, build a converter object for each
    field of the table. This is called for each table in otData.py, and
    the results are assigned to the corresponding class in otTables.py.ÚValueFormatÚuint16ÚCount)ÚStructLengthÚ	MorphType)Úuint8r5   Úuint32ÚSubTableÚExtSubTableÚ	SubStructÚFeatureParams)ÚCIDGlyphMappingÚGlyphCIDMappingú(©Údescription)Ú	MortChainÚMortSubtableÚ	MorxChain)r;   r<   r=   r   ÚfeatureParamTypes)Ú
startswithr4   ÚendswithÚComputedUInt8ÚComputedUShortÚComputedULongr;   r<   r=   r>   ÚStructWithLengthÚconverterMappingÚStructÚevalÚ
tableClassÚgetr   ÚvaluesÚTableÚ__name__rG   ÚdefaultFeatureParamsÚappend)Ú	tableSpecÚtableNamespaceÚ
convertersÚconvertersByNameÚtpÚnameÚrepeatÚauxÚdescrÚ	tableNameÚconverterClassÚconvrQ   r/   Úclss                  r0   ÚbuildConvertersre   0   s?  € ð €JØÐØ(1ó 6&Ñ$ˆˆD�&˜#˜uØˆ	Ø�?‰?˜=Ô)Ø˜’>Ð!�>Ü(‰NØ�]‰]˜7Ô# tÐ/LÑ'Lä&Ü(Ü'ñð ñ	‰Nð
 �ZÒÜ%‰NØ�]Ò"Ü(‰NØ�[Ò Ü&‰NØ�_Ò$Ü*‰NØÐ;Ñ;Ü-‰NàÔ)Ñ)¨c¸©mØ�	Ü!'‘ä!% b¨.Ô:JÓ!K�á˜d F¨C¸UÔCˆà�?Š?àŸ™‰JØÐ=Ñ=Ø'×+Ñ+¨BÓ/‰Jà'×+Ñ+¨IÓ6ˆJà�ŠØ(ˆDŒOàÐ;Ñ;Ø-¨mÑ<ˆDÔà×%Ñ%×,Ñ,Ó.ò S�ØŸ8™8›:ò S�CÜ5:¸4ÀÈÈcÓ5RÐ$ S§\¡\Ò2ñSðSð �?Ò"Ø%3Ð4GÑ%HˆDÔ"Ø(6°Ñ(GˆDÔ%Ø×-Ñ-×4Ñ4Ó6ò O�Ü16°t¸VÀSÈ#Ó1NÐ  §¡Ò.ðOà×Ñ˜$ÔØÐ+Ñ+Ð1¨TÓ1Ð+Ø!%Ð˜Óðm6&ðn Ð'Ð'Ð'r2   c                   ó€   — e Zd ZdZdddœd„Zd„ Zd„ Zd„ Zd	„ Zdd
„Z	d„ Z
d„ Z ej                  d«      Zdee   fd„Zy)ÚBaseConverterz\Base class for converter objects. Apart from the constructor, this
    is an abstract class.NÚ rB   c                ó6  — || _         || _        || _        | j                  r(| j                  st        | j                  dd«      | _        || _        |j                  d«      xs |dv | _        |j                  d«      xs |dk(  | _        |dv | _        || _	        y )Nz<string>rP   r6   )ÚDesignAxisRecordSizeÚValueRecordSizeÚ
LookupTyper8   )Ú
ClassCountÚClass2CountÚ
FeatureTagÚSettingsCountÚVarRegionCountÚMappingCountÚRegionAxisCountÚDesignAxisCountrj   ÚAxisValueCountrk   Ú	AxisCountÚBaseGlyphRecordCountÚLayerRecordCountÚAxisIndicesList)
r]   r^   r_   ÚcompilerQ   rI   ÚisCountÚisLookupTypeÚisPropagatedrC   ©Úselfr]   r^   r_   rQ   rC   s         r0   Ú__init__zBaseConverter.__init__t   s™   € ØˆŒ	ØˆŒØˆŒØ�8Š8˜DŸKšKÜ˜tŸx™x¨°VÓ<ˆDŒHØ$ˆŒØ—}‘} WÓ-ò 
°ð :
ð 2
ˆŒð !ŸM™M¨,Ó7ÒN¸4À;Ñ;NˆÔØ ð %
ð 
ˆÔð" 'ˆÕr2   c                 ó`  ‡ ‡‡‡	‡
— ‰j                   xr |dkD  }|r‰ j                  ‰«      Š
‰
t        u rd}|s6g }t        |«      D ]$  }|j	                  ‰ j                  ‰‰|«      «       Œ& |S ˆˆˆ
ˆ fd„} |«       Š	t        ˆ	fd„t        |«      D «       «      }‰j                  |‰
z  «       |S )z(Read an array of values from the reader.é   Fc                  óV   •‡‡— ‰j                  «       Š‰j                  Šˆˆˆˆˆfd„} | S )Nc                 óX   •— ‰j                  ‰| ‰z  z   «       ‰j                  ‰‰i «      S r,   )ÚseekÚread)ÚiÚfontÚposÚreader_copyÚ
recordSizer   s    €€€€€r0   Ú	read_itemzABaseConverter.readArray.<locals>.get_read_item.<locals>.read_item¥   s-   ø€ Ø×$Ñ$ S¨1¨z©>Ñ%9Ô:ØŸ9™9 [°$¸Ó;Ð;r2   ©Úcopyr‰   )rŒ   r‰   rŠ   rˆ   Úreaderr‹   r   s    @@€€€€r0   Úget_read_itemz.BaseConverter.readArray.<locals>.get_read_item¡   s)   ú€ Ø$Ÿk™k›m�Ø—j‘j�÷<ð <ð !Ð r2   c              3   ó"   •K  — | ]  }‰–— Œ y ­wr,   © )Ú.0r‡   rŒ   s     €r0   ú	<genexpr>z*BaseConverter.readArray.<locals>.<genexpr>¬   s   øè ø€ Ò9 qœÑ9ùs   ƒ)ÚlazyÚgetRecordSizeÚNotImplementedÚrangerW   r†   r   Úadvance)r   r�   rˆ   Ú	tableDictÚcountr•   Úlr‡   r�   rŒ   r‹   s   ```      @@r0   Ú	readArrayzBaseConverter.readArray“   s¦   ü€ à�y‰yÒ&˜U Q™YˆÙØ×+Ñ+¨FÓ3ˆJØœ^Ñ+Ø�ÙØˆAÜ˜5“\ò =�Ø—‘˜Ÿ™ 6¨4°Ó;Õ<ð=àˆH÷!ñ &›ˆIÜÓ9¬E°%«LÔ9Ó9ˆAØ�N‰N˜5 :Ñ-Ô.àˆHr2   c                 ó>   — t        | d«      r| j                  S t        S )NÚ
staticSize)ÚhasattrrŸ   r—   ©r   r�   s     r0   r–   zBaseConverter.getRecordSize±   s   € Ü�4˜Ô&Ø—?‘?Ð"ÜÐr2   c                 ó   — t        | «      ‚)zRead a value from the reader.©ÚNotImplementedError©r   r�   rˆ   rš   s       r0   r†   zBaseConverter.read¶   ó   € ä! $Ó'Ð'r2   c                 ó¤   — 	 t        |«      D ]  \  }}| j                  |||||«       Œ y # t        $ r}|j                  fz   |_        ‚ d }~ww xY wr,   )Ú	enumerateÚwriteÚ	ExceptionÚargs)r   Úwriterrˆ   rš   rS   r‡   ÚvalueÚes           r0   Ú
writeArrayzBaseConverter.writeArrayº   sW   € ð	Ü% fÓ-ò >‘��5Ø—
‘
˜6 4¨°E¸1Õ=ñ>øäò 	Ø—V‘V˜q˜d‘]ˆAŒFØûð	ús   ‚(+ «	A´A
Á
Ac                 ó   — t        | «      ‚)zWrite a value to the writer.r£   ©r   r¬   rˆ   rš   r­   ÚrepeatIndexs         r0   r©   zBaseConverter.writeÂ   r¦   r2   c                 ó   — t        | «      ‚)zRead a value from XML.r£   ©r   ÚattrsÚcontentrˆ   s       r0   ÚxmlReadzBaseConverter.xmlReadÆ   r¦   r2   c                 ó   — t        | «      ‚)zWrite a value to XML.r£   ©r   Ú	xmlWriterrˆ   r­   r]   rµ   s         r0   ÚxmlWritezBaseConverter.xmlWriteÊ   r¦   r2   zVarIndexBase\s*\+\s*(\d+)Úreturnc                 ó†   — | j                   j                  | j                  «      }|syt        |j	                  d«      «      S )zJIf description has `VarIndexBase + {offset}`, return the offset else None.Nr   )ÚvarIndexBasePlusOffsetREÚsearchrC   ÚintÚgroup)r   Úms     r0   ÚgetVarIndexOffsetzBaseConverter.getVarIndexOffsetÐ   s6   € à×)Ñ)×0Ñ0°×1AÑ1AÓBˆÙØÜ�1—7‘7˜1“:‹Ðr2   r,   )rU   Ú
__module__Ú__qualname__Ú__doc__r€   r�   r–   r†   r¯   r©   r·   r»   Úrerz   r¾   r*   rÀ   rÃ   r’   r2   r0   rg   rg   p   sZ   „ ñð'È"ô 'ò>ò<ò
(òó(ò(ò(ð  *˜rŸz™zÐ*FÓGÐð 8¨C¡=ô r2   rg   c                   ó8   — e Zd Zed„ «       Zed„ «       Zd„ Zd„ Zy)ÚSimpleValuec                 ó   — | S r,   r’   ©r­   s    r0   ÚtoStringzSimpleValue.toStringÙ   ó   € àˆr2   c                 ó   — | S r,   r’   rË   s    r0   Ú
fromStringzSimpleValue.fromStringÝ   rÍ   r2   c                 ór   — |j                  ||d| j                  |«      fgz   «       |j                  «        y ©Nr­   )Ú	simpletagrÌ   Únewliner¹   s         r0   r»   zSimpleValue.xmlWriteá   s4   € Ø×Ñ˜D %¨G°T·]±]À5Ó5IÐ+JÐ*KÑ"KÔLØ×ÑÕr2   c                 ó*   — | j                  |d   «      S rÑ   )rÏ   r´   s       r0   r·   zSimpleValue.xmlReadå   s   € Ø�‰˜u W™~Ó.Ð.r2   N)rU   rÄ   rÅ   ÚstaticmethodrÌ   rÏ   r»   r·   r’   r2   r0   rÉ   rÉ   Ø   s2   „ Øñó ðð ñó ðòó/r2   rÉ   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚOptionalValueNc                 óª   — || j                   k7  r"|j                  d| j                  |«      f«       |j                  ||«       |j	                  «        y rÑ   )ÚDEFAULTrW   rÌ   rÒ   rÓ   r¹   s         r0   r»   zOptionalValue.xmlWriteì   sD   € Ø�D—L‘LÒ Ø�L‰L˜' 4§=¡=°Ó#7Ð8Ô9Ø×Ñ˜D %Ô(Ø×ÑÕr2   c                 óJ   — d|v r| j                  |d   «      S | j                  S rÑ   )rÏ   rÙ   r´   s       r0   r·   zOptionalValue.xmlReadò   s'   € Ø�eÑØ—?‘? 5¨¡>Ó2Ð2Ø�|‰|Ðr2   )rU   rÄ   rÅ   rÙ   r»   r·   r’   r2   r0   r×   r×   é   s   „ Ø€Gòór2   r×   c                   ó   — e Zd Zed„ «       Zy)ÚIntValuec                 ó   — t        | d«      S ©Nr   )rÀ   rË   s    r0   rÏ   zIntValue.fromStringù   s   € ä�5˜!‹}Ðr2   N©rU   rÄ   rÅ   rÕ   rÏ   r’   r2   r0   rÜ   rÜ   ø   s   „ Øñó ñr2   rÜ   c                   ó*   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zy)ÚLongé   c                 ó"   — |j                  «       S r,   ©ÚreadLongr¥   s       r0   r†   z	Long.read  ó   € Ø�‰Ó Ð r2   c                 ó$   — |j                  |«      S r,   )ÚreadLongArray©r   r�   rˆ   rš   r›   s        r0   r�   zLong.readArray  ó   € Ø×#Ñ# EÓ*Ð*r2   Nc                 ó&   — |j                  |«       y r,   )Ú	writeLongr±   s         r0   r©   z
Long.write  ó   € Ø×Ñ˜Õr2   c                 ó&   — |j                  |«       y r,   )ÚwriteLongArray©r   r¬   rˆ   rš   rS   s        r0   r¯   zLong.writeArray
  ó   € Ø×Ñ˜fÕ%r2   r,   ©rU   rÄ   rÅ   rŸ   r†   r�   r©   r¯   r’   r2   r0   rá   rá   þ   ó   „ Ø€Jò!ò+ó ó&r2   rá   c                   ó*   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zy)ÚULongrâ   c                 ó"   — |j                  «       S r,   ©Ú	readULongr¥   s       r0   r†   z
ULong.read  ó   € Ø×ÑÓ!Ð!r2   c                 ó$   — |j                  |«      S r,   )ÚreadULongArrayré   s        r0   r�   zULong.readArray  ó   € Ø×$Ñ$ UÓ+Ð+r2   Nc                 ó&   — |j                  |«       y r,   ©Ú
writeULongr±   s         r0   r©   zULong.write  ó   € Ø×Ñ˜%Õ r2   c                 ó&   — |j                  |«       y r,   )ÚwriteULongArrayrð   s        r0   r¯   zULong.writeArray  ó   € Ø×Ñ˜vÕ&r2   r,   rò   r’   r2   r0   rõ   rõ     ó   „ Ø€Jò"ò,ó!ó'r2   rõ   c                   ó   — e Zd Zed„ «       Zy)ÚFlags32c                 ó   — d| z  S )Nz0x%08Xr’   rË   s    r0   rÌ   zFlags32.toString  ó   € à˜%ÑÐr2   N)rU   rÄ   rÅ   rÕ   rÌ   r’   r2   r0   r  r    s   „ Øñ ó ñ r2   r  c                   ó   — e Zd ZeZy)ÚVarIndexN)rU   rÄ   rÅ   r%   rÙ   r’   r2   r0   r
  r
  $  s   „ Ø �Gr2   r
  c                   ó*   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zy)ÚShorté   c                 ó"   — |j                  «       S r,   )Ú	readShortr¥   s       r0   r†   z
Short.read+  rù   r2   c                 ó$   — |j                  |«      S r,   )ÚreadShortArrayré   s        r0   r�   zShort.readArray.  rü   r2   Nc                 ó&   — |j                  |«       y r,   )Ú
writeShortr±   s         r0   r©   zShort.write1  r   r2   c                 ó&   — |j                  |«       y r,   )ÚwriteShortArrayrð   s        r0   r¯   zShort.writeArray4  r  r2   r,   rò   r’   r2   r0   r  r  (  r  r2   r  c                   ó*   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zy)ÚUShortr  c                 ó"   — |j                  «       S r,   ©Ú
readUShortr¥   s       r0   r†   zUShort.read;  ó   € Ø× Ñ Ó"Ð"r2   c                 ó$   — |j                  |«      S r,   )ÚreadUShortArrayré   s        r0   r�   zUShort.readArray>  s   € Ø×%Ñ% eÓ,Ð,r2   Nc                 ó&   — |j                  |«       y r,   ©ÚwriteUShortr±   s         r0   r©   zUShort.writeA  ó   € Ø×Ñ˜5Õ!r2   c                 ó&   — |j                  |«       y r,   )ÚwriteUShortArrayrð   s        r0   r¯   zUShort.writeArrayD  s   € Ø×Ñ Õ'r2   r,   rò   r’   r2   r0   r  r  8  s   „ Ø€Jò#ò-ó"ó(r2   r  c                   ó*   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zy)ÚInt8r   c                 ó"   — |j                  «       S r,   )ÚreadInt8r¥   s       r0   r†   z	Int8.readK  ræ   r2   c                 ó$   — |j                  |«      S r,   )ÚreadInt8Arrayré   s        r0   r�   zInt8.readArrayN  rê   r2   Nc                 ó&   — |j                  |«       y r,   )Ú	writeInt8r±   s         r0   r©   z
Int8.writeQ  rí   r2   c                 ó&   — |j                  |«       y r,   )ÚwriteInt8Arrayrð   s        r0   r¯   zInt8.writeArrayT  rñ   r2   r,   rò   r’   r2   r0   r%  r%  H  ró   r2   r%  c                   ó*   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zy)ÚUInt8r   c                 ó"   — |j                  «       S r,   )Ú	readUInt8r¥   s       r0   r†   z
UInt8.read[  rù   r2   c                 ó$   — |j                  |«      S r,   )ÚreadUInt8Arrayré   s        r0   r�   zUInt8.readArray^  rü   r2   Nc                 ó&   — |j                  |«       y r,   )Ú
writeUInt8r±   s         r0   r©   zUInt8.writea  r   r2   c                 ó&   — |j                  |«       y r,   )ÚwriteUInt8Arrayrð   s        r0   r¯   zUInt8.writeArrayd  r  r2   r,   rò   r’   r2   r0   r/  r/  X  r  r2   r/  c                   ó   — e Zd ZdZd„ Zdd„Zy)ÚUInt24é   c                 ó"   — |j                  «       S r,   ©Ú
readUInt24r¥   s       r0   r†   zUInt24.readk  r  r2   Nc                 ó&   — |j                  |«       y r,   ©ÚwriteUInt24r±   s         r0   r©   zUInt24.writen  r!  r2   r,   ©rU   rÄ   rÅ   rŸ   r†   r©   r’   r2   r0   r9  r9  h  s   „ Ø€Jò#ô"r2   r9  c                   ó   — e Zd Zd„ Zy)ÚComputedIntc                 óV   — |�'|j                  |›d|›�«       |j                  «        y y )Nú=)ÚcommentrÓ   r¹   s         r0   r»   zComputedInt.xmlWrites  s,   € ØÐØ×Ñª©uÐ5Ô6Ø×ÑÕð r2   N©rU   rÄ   rÅ   r»   r’   r2   r0   rC  rC  r  s   „ ó r2   rC  c                   ó   — e Zd Zy)rJ   N©rU   rÄ   rÅ   r’   r2   r0   rJ   rJ   y  ó   „ Ør2   rJ   c                   ó   — e Zd Zy)rK   NrI  r’   r2   r0   rK   rK   }  rJ  r2   rK   c                   ó   — e Zd Zy)rL   NrI  r’   r2   r0   rL   rL   �  rJ  r2   rL   c                   ó   — e Zd ZdZd„ Zdd„Zy)ÚTagrâ   c                 ó"   — |j                  «       S r,   )ÚreadTagr¥   s       r0   r†   zTag.readˆ  s   € Ø�~‰~ÓÐr2   Nc                 ó&   — |j                  |«       y r,   )ÚwriteTagr±   s         r0   r©   z	Tag.write‹  s   € Ø�‰˜Õr2   r,   rA  r’   r2   r0   rN  rN  …  s   „ Ø€Jò ôr2   rN  c                   ó.   — e Zd ZdZdZd„ Zd„ Zd„ Zdd„Zy)	ÚGlyphIDr  ÚHc                 ón   — |j                  |j                  | j                  | j                  |«      «      S r,   )ÚgetGlyphNameManyr�   ÚtypecoderŸ   ré   s        r0   r�   zGlyphID.readArray“  s/   € Ø×$Ñ$Ø×Ñ˜TŸ]™]¨D¯O©O¸UÓCó
ð 	
r2   c                 ól   — |j                  |j                  | j                  | j                  «      «      S r,   )ÚgetGlyphNameÚ	readValuerX  rŸ   r¥   s       r0   r†   zGlyphID.read˜  s(   € Ø× Ñ  ×!1Ñ!1°$·-±-ÀÇÁÓ!QÓRÐRr2   c                 óZ   — |j                  | j                  |j                  |«      «       y r,   )r¯   rX  ÚgetGlyphIDManyrð   s        r0   r¯   zGlyphID.writeArray›  s!   € Ø×Ñ˜$Ÿ-™-¨×)<Ñ)<¸VÓ)DÕEr2   Nc                 óZ   — |j                  | j                  |j                  |«      «       y r,   )Ú
writeValuerX  Ú
getGlyphIDr±   s         r0   r©   zGlyphID.writež  s   € Ø×Ñ˜$Ÿ-™-¨¯©¸Ó)?Õ@r2   r,   )	rU   rÄ   rÅ   rŸ   rX  r�   r†   r¯   r©   r’   r2   r0   rT  rT  �  s#   „ Ø€JØ€Hò
ò
SòFôAr2   rT  c                   ó   — e Zd ZdZdZy)Ú	GlyphID32râ   ÚLN)rU   rÄ   rÅ   rŸ   rX  r’   r2   r0   rb  rb  ¢  s   „ Ø€JØ�Hr2   rb  c                   ó   — e Zd Zd„ Zy)ÚNameIDc                 ó@  — |j                  ||d|fgz   «       |rt|rr|j                  d«      }|r_|j                  |«      }|j                  d«       |r|j	                  |«       n)|j	                  d«       t
        j                  d|z  «       |j                  «        y )Nr­   r]   ú  zmissing from name tablez"name id %d missing from name table)rÒ   rR   ÚgetDebugNamer©   rF  ÚlogÚwarningrÓ   )r   rº   rˆ   r­   r]   rµ   Ú	nameTables          r0   r»   zNameID.xmlWrite¨  s�   € Ø×Ñ˜D %¨G°UÐ+;Ð*<Ñ"<Ô=Ù‘EØŸ™ Ó(ˆIÙØ ×-Ñ-¨eÓ4�Ø—‘ Ô%ÙØ×%Ñ% dÕ+à×%Ñ%Ð&?Ô@Ü—K‘KÐ DÀuÑ LÔMØ×ÑÕr2   NrG  r’   r2   r0   re  re  §  s   „ ór2   re  c                   ó   — e Zd Zd„ Zy)Ú	STATFlagsc                 ó  — |j                  ||d|fgz   «       g }|dz  r|j                  d«       |dz  r|j                  d«       |r1|j                  d«       |j                  dj	                  |«      «       |j                  «        y )Nr­   r   ÚOlderSiblingFontAttributer  ÚElidableAxisValueNamerg  ú )rÒ   rW   r©   rF  ÚjoinrÓ   ©r   rº   rˆ   r­   r]   rµ   Úflagss          r0   r»   zSTATFlags.xmlWrite¸  s}   € Ø×Ñ˜D %¨G°UÐ+;Ð*<Ñ"<Ô=ØˆØ�4Š<Ø�L‰LÐ4Ô5Ø�4Š<Ø�L‰LÐ0Ô1ÙØ�O‰O˜DÔ!Ø×Ñ˜cŸh™h u›oÔ.Ø×ÑÕr2   NrG  r’   r2   r0   rm  rm  ·  s   „ ó
r2   rm  c                   ó   — e Zd Zed„ «       Zy)Ú
FloatValuec                 ó   — t        | «      S r,   )ÚfloatrË   s    r0   rÏ   zFloatValue.fromStringÆ  ó   € ä�U‹|Ðr2   Nrß   r’   r2   r0   rv  rv  Å  s   „ Øñó ñr2   rv  c                   ó   — e Zd ZdZd„ Zdd„Zy)Ú
DeciPointsr  c                 ó(   — |j                  «       dz  S ©Né
   r  r¥   s       r0   r†   zDeciPoints.readÎ  s   € Ø× Ñ Ó" RÑ'Ð'r2   Nc                 ó>   — |j                  t        |dz  «      «       y r}  )r   Úroundr±   s         r0   r©   zDeciPoints.writeÑ  s   € Ø×Ñœ5 ¨¡Ó,Õ-r2   r,   rA  r’   r2   r0   r{  r{  Ë  s   „ Ø€Jò(ô.r2   r{  c                   ój   — e Zd ZeZeZeZeZd„ Zdd„Z	e
d„ «       Ze
d„ «       Ze
d„ «       Ze
d„ «       Zy)	ÚBaseFixedValuec                 óV   — | j                   t        || j                  «      «       «      S r,   )ÚfromIntÚgetattrÚreaderMethodr¥   s       r0   r†   zBaseFixedValue.readÛ  s$   € Ø�|‰|Ð>œG F¨D×,=Ñ,=Ó>Ó@ÓAÐAr2   Nc                 óZ   —  t        || j                  «      | j                  |«      «       y r,   )r…  ÚwriterMethodÚtoIntr±   s         r0   r©   zBaseFixedValue.writeÞ  s"   € Ø*Œ�˜×)Ñ)Ó*¨4¯:©:°eÓ+<Õ=r2   c                 ó.   — t        || j                  «      S r,   )Úfi2flÚprecisionBits©rd   r­   s     r0   r„  zBaseFixedValue.fromIntá  ó   € ä�U˜C×-Ñ-Ó.Ð.r2   c                 ó.   — t        || j                  «      S r,   )Úfl2firŒ  r�  s     r0   r‰  zBaseFixedValue.toIntå  rŽ  r2   c                 ó.   — t        || j                  «      S r,   )Ústr2flrŒ  r�  s     r0   rÏ   zBaseFixedValue.fromStringé  ó   € ä�e˜S×.Ñ.Ó/Ð/r2   c                 ó.   — t        || j                  «      S r,   )Úfl2strrŒ  r�  s     r0   rÌ   zBaseFixedValue.toStringí  r“  r2   r,   )rU   rÄ   rÅ   r—   rŸ   rŒ  r†  rˆ  r†   r©   Úclassmethodr„  r‰  rÏ   rÌ   r’   r2   r0   r‚  r‚  Õ  sq   „ Ø€JØ"€MØ!€LØ!€LòBó>ð ñ/ó ð/ð ñ/ó ð/ð ñ0ó ð0ð ñ0ó ñ0r2   r‚  c                   ó   — e Zd ZdZdZdZdZy)ÚFixedrâ   é   rå   rì   N©rU   rÄ   rÅ   rŸ   rŒ  r†  rˆ  r’   r2   r0   r˜  r˜  ò  s   „ Ø€JØ€MØ€LØ�Lr2   r˜  c                   ó   — e Zd ZdZdZdZdZy)ÚF2Dot14r  é   r  r  Nrš  r’   r2   r0   rœ  rœ  ù  s   „ Ø€JØ€MØ€LØ�Lr2   rœ  c                   ód   ‡ — e Zd ZdZdZeˆ fd„«       Zeˆ fd„«       Zed„ «       Zed„ «       Z	ˆ xZ
S )ÚAngleg        g     €†?c                 óB   •— t         ‰| �  |«      | j                  z   dz  S ©Né´   )Úsuperr„  Úbias©rd   r­   Ú	__class__s     €r0   r„  zAngle.fromInt  s    ø€ ä‘‘ Ó&¨¯©Ñ1°SÑ8Ð8r2   c                 óB   •— t         ‰| �  |dz  | j                  z
  «      S r¡  )r£  r‰  r¤  r¥  s     €r0   r‰  zAngle.toInt
  s   ø€ ä‰w‰}˜e c™k¨S¯X©XÑ5Ó6Ð6r2   c                 ó^   — t        t        |«      | j                  z  «      | j                  z  S r,   )r   rx  Úfactorr�  s     r0   rÏ   zAngle.fromString  s%   € ô ”u˜U“| c§j¡jÑ0Ó1°C·J±JÑ>Ð>r2   c                 ó.   — t        || j                  «      S r,   )r
   r©  r�  s     r0   rÌ   zAngle.toString  s   € ä*¨5°#·*±*Ó=Ð=r2   )rU   rÄ   rÅ   r¤  r©  r–  r„  r‰  rÏ   rÌ   Ú__classcell__©r¦  s   @r0   rŸ  rŸ     s]   ø„ ð €DØ"€Fàó9ó ð9ð ó7ó ð7ð ñ?ó ð?ð ñ>ó ô>r2   rŸ  c                   ó   — e Zd ZdZy)ÚBiasedAngleg      ð?N)rU   rÄ   rÅ   r¤  r’   r2   r0   r®  r®    s	   „ ð �Dr2   r®  c                   óN   — e Zd ZdZd„ Zdd„Zed„ «       Zed„ «       Zed„ «       Z	y)	ÚVersionrâ   c                 ó&   — |j                  «       }|S r,   rä   )r   r�   rˆ   rš   r­   s        r0   r†   zVersion.read!  s   € Ø—‘Ó!ˆØˆr2   Nc                 ó<   — t        |«      }|j                  |«       y r,   )Úfi2verì   r±   s         r0   r©   zVersion.write%  s   € Ü�e“ˆØ×Ñ˜Õr2   c                 ó   — t        | «      S r,   )Úve2firË   s    r0   rÏ   zVersion.fromString)  ry  r2   c                 ó   — d| z  S )Nú0x%08xr’   rË   s    r0   rÌ   zVersion.toString-  r  r2   c                 ó   — t        | d«      S )Nr™  )r�  )Úvs    r0   Ú	fromFloatzVersion.fromFloat1  s   € ä�Q˜‹|Ðr2   r,   )
rU   rÄ   rÅ   rŸ   r†   r©   rÕ   rÏ   rÌ   rº  r’   r2   r0   r°  r°    sM   „ Ø€Jòó ð ñó ðð ñ ó ð ð ñó ñr2   r°  c                   ó"   — e Zd ZdZdZd„ Zdd„Zy)ÚChar64z›An ASCII string with up to 64 characters.

    Unused character positions are filled with 0x00 bytes.
    Used in Apple AAT fonts in the `gcid` table.
    é@   c                 óà   — |j                  | j                  «      }|j                  d«      }|dk\  r|d | }t        |dd¬«      }|t        |dd¬«      k7  rt        j                  d|z  «       |S )Nó    r   ÚasciiÚreplace©ÚencodingÚerrorsÚignorez%replaced non-ASCII characters in "%s")ÚreadDatarŸ   Úfindr   ri  rj  )r   r�   rˆ   rš   ÚdataÚzeroPosÚss          r0   r†   zChar64.read?  sj   € Ø�‰˜tŸ™Ó/ˆØ—)‘)˜EÓ"ˆØ�aŠ<Ø˜˜�>ˆDÜ�$ °Ô;ˆØ”�d W°XÔ>Ò>Ü�K‰KÐ?À!ÑCÔDØˆr2   Nc                 óJ  — t        |dd¬«      }|t        |dd¬«      k7  rt        j                  d|z  «       t        |«      | j                  kD  r$t        j                  d|| j                  fz  «       |d| j                  z  z   d | j                   }|j                  |«       y )NrÀ  rÁ  rÂ  rÅ  z&replacing non-ASCII characters in "%s"z$truncating overlong "%s" to %d bytesr¿  )r   ri  rj  ÚlenrŸ   Ú	writeData)r   r¬   rˆ   rš   r­   r²   rÈ  s          r0   r©   zChar64.writeI  s�   € Ü�u w°yÔAˆØ”7˜5¨7¸8ÔDÒDÜ�K‰KÐ@À5ÑHÔIÜˆt‹9�t—‘Ò&Ü�K‰KØ6¸%ÀÇÁÐ9QÑQôð �u˜tŸ™Ñ.Ñ.Ð0A°$·/±/ÐBˆØ×Ñ˜Õr2   r,   )rU   rÄ   rÅ   rÆ   rŸ   r†   r©   r’   r2   r0   r¼  r¼  6  s   „ ñð €Jòô	r2   r¼  c                   ó2   — e Zd Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zy)	rO   c                 óT   — | j                   xr | j                   j                  |«      S r,   )rQ   r–   r¡   s     r0   r–   zStruct.getRecordSizeV  s    € Ø�‰ÒH 4§?¡?×#@Ñ#@ÀÓ#HÐHr2   c                 óJ   — | j                  «       }|j                  ||«       |S r,   )rQ   Ú	decompile)r   r�   rˆ   rš   Útables        r0   r†   zStruct.readY  s!   € Ø—‘Ó!ˆØ�‰˜ Ô%Øˆr2   Nc                 ó(   — |j                  ||«       y r,   )rz   r±   s         r0   r©   zStruct.write^  s   € Ø�‰�f˜dÕ#r2   c                 ó†   — |€*|r'|j                  ||dgz   «       |j                  «        y y |j                  ||||¬«       y )N)Úemptyr   )r]   )rÒ   rÓ   ÚtoXMLr¹   s         r0   r»   zStruct.xmlWritea  sF   € Øˆ=Ùð ×#Ñ# D¨%°<°.Ñ*@ÔAØ×!Ñ!Õ#àà�K‰K˜	 4¨°TˆKÕ:r2   c                 ó*  — d|v rt        |d   «      ry | j                  «       }|j                  d«      }|�t        |«      |_        t        |d«       }|rªd}|j                  «       D ]•  }|j                  sŒd}t        |d«      si |_        |j                  }	|j                  |	vsJ |j                  |	f«       ‚t        ||j                  d «       t        |j                  |j                  «      |	|j                  <   Œ— |D ]-  }
t        |
t        «      r|
\  }}}|j                  ||||«       Œ.Œ/ |j!                  t#        |dd «      ¬«       |rBr@|j                  «       D ]-  }|j                  sŒ|j                  }	|	|j                  = |	rŒ,|`Œ/ |S )NrÕ  ÚFormatÚpostReadFTÚ_propagator)Ú
propagator)r   rQ   rR   rÀ   rØ  r    ÚgetConvertersr}   rÚ  r]   Úsetattrr   Ú__dict__r-   r.   ÚfromXMLÚpopulateDefaultsr…  )r   rµ   r¶   rˆ   rÒ  rØ  Ú
noPostReadÚcleanPropagationrc   rÛ  Úelementr]   s               r0   r·   zStruct.xmlReadn  s”  € Ø�eÑ¤¨¨w©Ô 8ØØ—‘Ó!ˆØ—‘˜8Ó$ˆØÐÜ˜v›;ˆEŒLä  ¨
Ó3Ð3ˆ
Ùà$ÐØ×+Ñ+Ó-ò V�Ø×$Ó$Ø'+Ð$Ü" 4¨Ô7Ø+-˜Ô(Ø!%×!1Ñ!1�JØŸ9™9¨JÑ6ÐO¸¿¹ÀJÐ8OÓOÐ6Ü˜E 4§9¡9¨dÔ3Ü,:¸5¿>¹>È4Ï9É9Ó,U�J˜tŸy™yÒ)ðVð ò 	ˆGÜ˜'¤5Ô)Ø'.Ñ$��e˜WØ—‘˜d E¨7°DÕ9àð	ð 	×Ñ¬'°$¸ÀtÓ*LÐÔMáÙØ!×/Ñ/Ó1ò 1�DØ×(Ó(Ø%)×%5Ñ%5˜
Ø& t§y¡yÐ1Ú)Ø $Ñ 0ð1ð ˆr2   c                 ó2   — dt        | j                  «      z   S )Nz
Struct of )ÚreprrQ   )r   s    r0   Ú__repr__zStruct.__repr__˜  s   € Øœd 4§?¡?Ó3Ñ3Ð3r2   r,   )	rU   rÄ   rÅ   r–   r†   r©   r»   r·   ræ  r’   r2   r0   rO   rO   U  s"   „ òIòó
$ò;ò(óT4r2   rO   c                   ó   — e Zd Zd„ Zdd„Zy)rM   c                 óž   — |j                   }| j                  «       }|j                  ||«       |j                  ||j                  z   «       |S r,   )r‰   rQ   rÑ  r…   r7   )r   r�   rˆ   rš   r‰   rÒ  s         r0   r†   zStructWithLength.read�  sA   € Ø�j‰jˆØ—‘Ó!ˆØ�‰˜ Ô%Ø�‰�C˜%×,Ñ,Ñ,Ô-Øˆr2   Nc                 ó$  — t        |j                  «       «      D ]  \  }}|j                  dk(  sŒ n t        |j                  «      z   }t        |t        «      r|dz  }ddddœj                     }	|j                  «       }
|	|_	        |j                  ||«       |j                  «       |
z
  }|j                  «       }|j                  ||||«       |j                  |   dd |j                   k(  sJ ‚|j                  «       |j                  |<   y )Nr7   r   éÞ   i­Þ  ì   ï>[= )r   r  râ   ó   Þ­¾ï)r¨   rÜ  r]   rÌ  Úitemsr-   r   rŸ   ÚgetDataLengthr7   rz   ÚgetSubWriterr©   Ú
getAllData)r   r¬   rˆ   rš   r­   r²   Ú	convIndexrc   ÚlengthIndexÚdeadbeefÚbeforeÚlengthÚlengthWriters                r0   r©   zStructWithLength.write¤  s  € Ü(¨×)<Ñ)<Ó)>Ó?ò 	‰OˆI�tØ�y‰y˜NÓ*Ùð	ô ˜&Ÿ,™,Ó'¨)Ñ3ˆÜ�eÔ5Ô6Ø˜1ÑˆKØ ¨:Ñ6°t·±ÑGˆà×%Ñ%Ó'ˆØ%ˆÔØ�‰�f˜dÔ#Ø×%Ñ%Ó'¨&Ñ0ˆØ×*Ñ*Ó,ˆØ�
‰
�<  y°&Ô9Ø�|‰|˜KÑ(Ð,?Ð@QÀ$Ç/Á/Ð,RÒRÐRÐRØ$0×$;Ñ$;Ó$=ˆ�‰�[Ò!r2   r,   ©rU   rÄ   rÅ   r†   r©   r’   r2   r0   rM   rM   œ  s   „ òô>r2   rM   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zdd„Zy)rT   r  c                 ó"   — |j                  «       S r,   r  r¡   s     r0   Ú
readOffsetzTable.readOffsetº  r  r2   c                 ó&   — |j                  d«       y rÞ   r  ©r   r¬   s     r0   ÚwriteNullOffsetzTable.writeNullOffset½  ó   € Ø×Ñ˜1Õr2   c                 óÒ   — | j                  |«      }|dk(  ry | j                  «       }|j                  |«      }|j                  r||_        ||_        |S |j                  ||«       |S rÞ   )rú  rQ   ÚgetSubReaderr•   r�   rˆ   rÑ  )r   r�   rˆ   rš   ÚoffsetrÒ  s         r0   r†   z
Table.readÀ  sg   € Ø—‘ Ó(ˆØ�QŠ;ØØ—‘Ó!ˆØ×$Ñ$ VÓ,ˆØ�9Š9Ø!ˆEŒLØˆEŒJð ˆð �O‰O˜F DÔ)Øˆr2   Nc                 óÞ   — |€| j                  |«       y |j                  «       }| j                  |_        |�||_        |j	                  || j
                  ¬«       |j                  ||«       y )N©Ú
offsetSize)rý  rï  r]   r²   ÚwriteSubTablerŸ   rz   )r   r¬   rˆ   rš   r­   r²   Ú	subWriters          r0   r©   zTable.writeÍ  sa   € Øˆ=Ø× Ñ  Õ(à×+Ñ+Ó-ˆIØ!ŸY™YˆIŒNØÐ&Ø(3�	Ô%Ø× Ñ  °t·±Ð ÔGØ�M‰M˜) TÕ*r2   r,   )rU   rÄ   rÅ   rŸ   rú  rý  r†   r©   r’   r2   r0   rT   rT   ·  s   „ Ø€Jò#òòô	+r2   rT   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚLTablerâ   c                 ó"   — |j                  «       S r,   r÷   r¡   s     r0   rú  zLTable.readOffsetÜ  rù   r2   c                 ó&   — |j                  d«       y rÞ   rþ   rü  s     r0   rý  zLTable.writeNullOffsetß  s   € Ø×Ñ˜!Õr2   N©rU   rÄ   rÅ   rŸ   rú  rý  r’   r2   r0   r  r  Ù  s   „ Ø€Jò"ór2   r  c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚTable24r:  c                 ó"   — |j                  «       S r,   r<  r¡   s     r0   rú  zTable24.readOffsetç  r  r2   c                 ó&   — |j                  d«       y rÞ   r?  rü  s     r0   rý  zTable24.writeNullOffsetê  rþ  r2   Nr  r’   r2   r0   r  r  ä  s   „ Ø€Jò#ór2   r  c                   ó$   ‡ — e Zd Zd„ Zˆ fd„Zˆ xZS )r=   c                 óŠ   — | j                   |   |   }| j                  | j                  | j                  | j                  |«      S r,   ©r   r¦  r]   r^   r_   ©r   Ú	tableTypeÚ
lookupTyperQ   s       r0   ÚgetConverterzSubStruct.getConverterò  ó8   € Ø×%Ñ% iÑ0°Ñ<ˆ
Ø�~‰~˜dŸi™i¨¯©°d·h±hÀ
ÓKÐKr2   c                 ó4   •— t         t        | �  |||d |«       y r,   )r£  r=   r»   ©r   rº   rˆ   r­   r]   rµ   r¦  s         €r0   r»   zSubStruct.xmlWriteö  s   ø€ ÜŒi˜Ñ'¨	°4¸ÀÀeÕLr2   ©rU   rÄ   rÅ   r  r»   r«  r¬  s   @r0   r=   r=   ñ  s   ø„ òL÷Mð Mr2   r=   c                   ó$   ‡ — e Zd Zd„ Zˆ fd„Zˆ xZS )r;   c                 óŠ   — | j                   |   |   }| j                  | j                  | j                  | j                  |«      S r,   r  r  s       r0   r  zSubTable.getConverterû  r  r2   c                 ó4   •— t         t        | �  |||d |«       y r,   )r£  r;   r»   r  s         €r0   r»   zSubTable.xmlWriteÿ  s   ø€ ÜŒh˜Ñ& y°$¸¸tÀUÕKr2   r  r¬  s   @r0   r;   r;   ú  s   ø„ òL÷Lð Lr2   r;   c                   ó   — e Zd Zdd„Zy)r<   Nc                 óF   — d|_         t        j                  | |||||«       y )NT)Ú	ExtensionrT   r©   r±   s         r0   r©   zExtSubTable.write  s    € ØˆÔÜ�‰�D˜& $¨	°5¸+ÕFr2   r,   )rU   rÄ   rÅ   r©   r’   r2   r0   r<   r<     s   „ ôGr2   r<   c                   ó   — e Zd Zd„ Zy)r>   c                 ó²   — | j                   j                  || j                  «      }| j                  | j                  | j
                  | j                  |«      S r,   )rG   rR   rV   r¦  r]   r^   r_   )r   Ú
featureTagrQ   s      r0   r  zFeatureParams.getConverter
  sA   € Ø×+Ñ+×/Ñ/°
¸D×<UÑ<UÓVˆ
Ø�~‰~˜dŸi™i¨¯©°d·h±hÀ
ÓKÐKr2   N)rU   rÄ   rÅ   r  r’   r2   r0   r>   r>   	  s   „ óLr2   r>   c                   ó,   — e Zd ZdZdddœd„Zd„ Zdd„Zy)	r4   r  Nrh   rB   c                ór   — t         j                  | |||||¬«       d|d   dk(  r
dz   | _        y dz   | _        y )NrB   r4   éÿÿÿÿÚ2Ú1)rg   r€   Úwhichr~   s         r0   r€   zValueFormat.__init__  sC   € Ü×ÑØ�$˜  Z¸[ð 	ô 	
ð #¨T°"©X¸ª_ cÑFˆ�
À#ÑFˆ�
r2   c                 óV   — |j                  «       }t        |«      || j                  <   |S r,   )r  r   r)  ©r   r�   rˆ   rš   Úformats        r0   r†   zValueFormat.read  s(   € Ø×"Ñ"Ó$ˆÜ/°Ó7ˆˆt�z‰zÑØˆr2   c                 óV   — |j                  |«       t        |«      || j                  <   y r,   )r   r   r)  )r   r¬   rˆ   rš   r,  r²   s         r0   r©   zValueFormat.write  s#   € Ø×Ñ˜6Ô"Ü/°Ó7ˆˆt�z‰zÒr2   r,   )rU   rÄ   rÅ   rŸ   r€   r†   r©   r’   r2   r0   r4   r4     s   „ Ø€JðGÈ"ô Gòô
8r2   r4   c                   ó,   — e Zd Zd„ Zd„ Zdd„Zd„ Zd„ Zy)ÚValueRecordc                 ó8   — dt        || j                     «      z  S ©Nr  )rÌ  r)  r¡   s     r0   r–   zValueRecord.getRecordSize#  s   € Ø”3�v˜dŸj™jÑ)Ó*Ñ*Ð*r2   c                 ó@   — || j                      j                  ||«      S r,   )r)  ÚreadValueRecordr¥   s       r0   r†   zValueRecord.read&  s   € Ø�d—j‘jÑ!×1Ñ1°&¸$Ó?Ð?r2   Nc                 óD   — || j                      j                  |||«       y r,   )r)  ÚwriteValueRecordr±   s         r0   r©   zValueRecord.write)  s   € Øˆt�z‰zÑ×+Ñ+¨F°D¸%Õ@r2   c                 óF   — |€y |j                  ||| j                  |«       y r,   )rÖ  r]   r¹   s         r0   r»   zValueRecord.xmlWrite,  s    € Øˆ=Øà�K‰K˜	 4¨¯©°EÕ:r2   c                 óH   — ddl m}  |«       }|j                  d |||«       |S )Nr   )r/  )ÚotBaser/  rß  )r   rµ   r¶   rˆ   r/  r­   s         r0   r·   zValueRecord.xmlRead2  s#   € Ý'á“ˆØ�‰�d˜E 7¨DÔ1Øˆr2   r,   )rU   rÄ   rÅ   r–   r†   r©   r»   r·   r’   r2   r0   r/  r/  "  s   „ ò+ò@óAò;ór2   r/  c                   ó”   — e Zd ZdZddœd„Zd„ Zdd„Ze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)Ú	AATLookupr~  rh   rB   c                óÞ   — t         j                  | |||||¬«       t        | j                  t        «      r| j                  dd d ¬«      | _        y t        dd d | j                  ¬«      | _        y )NrB   ÚValue)r]   r^   r_   )r]   r^   r_   rQ   )rg   r€   Ú
issubclassrQ   rÉ   Ú	converterrT   r~   s         r0   r€   zAATLookup.__init__=  sa   € Ü×ÑØ�$˜  Z¸[ð 	ô 	
ô �d—o‘o¤{Ô3Ø!Ÿ_™_°'À$ÈD˜_ÓQˆD�Nä"Ø T¨tÀÇÁôˆD�Nr2   c                 ó  — |j                  «       }|dk(  r| j                  ||«      S |dk(  r| j                  ||«      S |dk(  r| j                  ||«      S |dk(  r| j	                  ||«      S |dk(  r| j                  ||«      S J d|z  «       ‚)Nr   r  râ   é   r‚   zunsupported lookup format: %d)r  ÚreadFormat0ÚreadFormat2ÚreadFormat4ÚreadFormat6ÚreadFormat8r+  s        r0   r†   zAATLookup.readH  s¢   € Ø×"Ñ"Ó$ˆØ�QŠ;Ø×#Ñ# F¨DÓ1Ð1Ø�qŠ[Ø×#Ñ# F¨DÓ1Ð1Ø�qŠ[Ø×#Ñ# F¨DÓ1Ð1Ø�qŠ[Ø×#Ñ# F¨DÓ1Ð1Ø�qŠ[Ø×#Ñ# F¨DÓ1Ð1àBÐ9¸FÑBÓB�5r2   Nc                 óò  — t        t        |j                  «       D ��cg c]  \  }}|j                  |«      |f‘Œ c}}«      «      }t        t        t	        d | j                  |||«      | j                  |||«      | j                  |||«      | j                  |||«      g«      «      «      }	|	d   \  }
}}|j                  «       } |«        |j                  «       |z
  }||
k(  sJ d||
|fz  «       ‚y c c}}w )Nr   z;AATLookup format %d claimed to write %d bytes, but wrote %d)
ÚlistÚsortedrí  r`  ÚfilterÚbuildFormat0ÚbuildFormat2ÚbuildFormat6ÚbuildFormat8rî  )r   r¬   rˆ   rš   r­   r²   ÚglyphÚvalrS   ÚformatsÚdataSizeÚlookupFormatÚwriteMethodr‰   Ú
actualSizes                  r0   r©   zAATLookup.writeW  s  € ÜÜÀEÇKÁKÃM×R±j°e¸S�T—_‘_ UÓ+¨SÒ1ÓRÓSó
ˆô ÜÜØà×)Ñ)¨&°$¸Ó?Ø×)Ñ)¨&°$¸Ó?Ø×)Ñ)¨&°$¸Ó?Ø×)Ñ)¨&°$¸Ó?ð	óó
ó
ˆð /6°a©jÑ+ˆ�, Ø×"Ñ"Ó$ˆÙŒØ×)Ñ)Ó+¨cÑ1ˆ
à˜(Ò"ð	
àHØØØðL
ñ 
ó	
Ù"ùó/ Ss   žC3c                 óÐ   — | j                  |«       | j                  |«       t        ||¬«      \  }}}| j                  |«       | j                  |«       | j                  |«       y )N)ÚnÚitemSize)r   r   )r¬   ÚnumUnitsÚunitSizeÚsearchRangeÚentrySelectorÚ
rangeShifts         r0   ÚwriteBinSearchHeaderzAATLookup.writeBinSearchHeaderw  s`   € à×Ñ˜8Ô$Ø×Ñ˜8Ô$Ü1?Ø ô2
Ñ.ˆ�] Jð 	×Ñ˜;Ô'Ø×Ñ˜=Ô)Ø×Ñ˜:Õ&r2   c                 ó¨   ‡ ‡‡‡— t        ‰j                  «       «      }t        ‰«      |k7  ry ‰ j                  j                  }d||z  z   dˆˆ ˆˆfd„fS )Nr  r   c                  ó*   •— ‰j                  ‰‰ ‰«      S r,   )ÚwriteFormat0©rˆ   r   rS   r¬   s   €€€€r0   r1   z(AATLookup.buildFormat0.<locals>.<lambda>Š  ó   ø€ �D×%Ñ% f¨d°FÓ;€ r2   )rÌ  ÚgetGlyphOrderr>  rŸ   )r   r¬   rˆ   rS   Ú	numGlyphsÚ	valueSizes   ````  r0   rJ  zAATLookup.buildFormat0‚  sQ   û€ Ü˜×*Ñ*Ó,Ó-ˆ	Üˆv‹;˜)Ò#ØØ—N‘N×-Ñ-ˆ	à�	˜IÑ%Ñ%ØÞ;ð
ð 	
r2   c                 óz   — |j                  d«       |D ]%  \  }}| j                  j                  ||d |d ¬«       Œ' y )Nr   ©rš   r­   r²   )r   r>  r©   )r   r¬   rˆ   rS   ÚglyphID_r­   s         r0   r`  zAATLookup.writeFormat0�  sE   € Ø×Ñ˜1ÔØ%ò 	‰OˆH�eØ�N‰N× Ñ Ø˜¨°EÀtð !õ ñ	r2   c                 óF  ‡ ‡‡‡— |d   \  }}|}g Š|dd  D ]/  \  }}||dz   k7  s||k7  r‰j                  |||f«       |x}}|}Œ.|}Œ1 ‰j                  |||f«       ‰ j                  j                  }	t        ‰«      dz   |	dz   }}
d‰ j                  z   |
|z  z   dˆˆˆ ˆfd„fS )Nr   r   râ   r  c                  ó*   •— ‰j                  ‰‰ ‰«      S r,   )ÚwriteFormat2)rˆ   Úsegmentsr   r¬   s   €€€€r0   r1   z(AATLookup.buildFormat2.<locals>.<lambda>¥  s   ø€ �D×%Ñ% f¨d°HÓ=€ r2   )rW   r>  rŸ   rÌ  ÚBIN_SEARCH_HEADER_SIZE)r   r¬   rˆ   rS   ÚsegStartÚsegValueÚsegEndÚglyphIDÚcurValuere  rX  rY  rl  s   ```         @r0   rK  zAATLookup.buildFormat2”  sÑ   û€ Ø# A™YÑˆ�(ØˆØˆØ!'¨¨ ò 	!ÑˆG�XØ˜& 1™*Ò$¨°HÒ(<Ø—‘ ¨6°8Ð <Ô=Ø$+Ð+�˜6Ø#‘à ‘ð	!ð 	�‰˜ 6¨8Ð4Ô5Ø—N‘N×-Ñ-ˆ	Ü  ›]¨QÑ.°	¸A±�(ˆà�×+Ñ+Ñ+¨h¸Ñ.AÑAØÞ=ð
ð 	
r2   c                 óž  — |j                  d«       | j                  j                  }t        |«      |dz   }}| j	                  |||«       |D ]H  \  }}}	|j                  |«       |j                  |«       | j                  j                  ||d |	d ¬«       ŒJ |j                  d«       |j                  d«       |j                  d|z  «       y )Nr  râ   rg  éÿÿ  r¿  ©r   r>  rŸ   rÌ  r]  r©   rÍ  )
r   r¬   rˆ   rl  re  rX  rY  Ú
firstGlyphÚ	lastGlyphr­   s
             r0   rk  zAATLookup.writeFormat2¨  sÇ   € Ø×Ñ˜1ÔØ—N‘N×-Ñ-ˆ	Ü  ›]¨I¸©M�(ˆØ×!Ñ! &¨(°HÔ=Ø,4ò 	Ñ(ˆJ˜	 5Ø×Ñ˜yÔ)Ø×Ñ˜zÔ*Ø�N‰N× Ñ Ø˜¨°EÀtð !õ ð	ð 	×Ñ˜6Ô"Ø×Ñ˜6Ô"Ø×Ñ˜ 9Ñ,Õ-r2   c                 ó˜   ‡ ‡‡‡— ‰ j                   j                  }t        ‰«      |dz   }}d‰ j                  z   |dz   |z  z   dˆˆ ˆˆfd„fS )Nr  r   r@  c                  ó*   •— ‰j                  ‰‰ ‰«      S r,   )ÚwriteFormat6ra  s   €€€€r0   r1   z(AATLookup.buildFormat6.<locals>.<lambda>½  rb  r2   )r>  rŸ   rÌ  rm  )r   r¬   rˆ   rS   re  rX  rY  s   ````   r0   rL  zAATLookup.buildFormat6·  sO   û€ Ø—N‘N×-Ñ-ˆ	Ü  ›[¨)°a©-�(ˆà�×+Ñ+Ñ+¨x¸!©|¸xÑ.GÑGØÞ;ð
ð 	
r2   c                 óX  — |j                  d«       | j                  j                  }t        |«      |dz   }}| j	                  |||«       |D ]6  \  }}|j                  |«       | j                  j                  ||d |d ¬«       Œ8 |j                  d«       |j                  d|z  «       y )Nr@  r  rg  rt  r¿  ru  )	r   r¬   rˆ   rS   re  rX  rY  rq  r­   s	            r0   rz  zAATLookup.writeFormat6À  s¨   € Ø×Ñ˜1ÔØ—N‘N×-Ñ-ˆ	Ü  ›[¨)°a©-�(ˆØ×!Ñ! &¨(°HÔ=Ø$ò 	‰NˆG�UØ×Ñ˜wÔ'Ø�N‰N× Ñ Ø˜¨°EÀtð !õ ð	ð
 	×Ñ˜6Ô"Ø×Ñ˜ 9Ñ,Õ-r2   c                 ó´   ‡ ‡‡‡— ‰d   d   ‰d   d   }}t        ‰«      ||z
  dz   k7  ry ‰ j                  j                  }dt        ‰«      |z  z   dˆˆ ˆˆfd„fS )Nr   r&  r   r@  r‚   c                  ó*   •— ‰j                  ‰‰ ‰«      S r,   )ÚwriteFormat8ra  s   €€€€r0   r1   z(AATLookup.buildFormat8.<locals>.<lambda>Õ  rb  r2   )rÌ  r>  rŸ   )r   r¬   rˆ   rS   Ú
minGlyphIDÚ
maxGlyphIDre  s   ````   r0   rM  zAATLookup.buildFormat8Í  se   û€ Ø!'¨¡¨1¡¨v°b©z¸!©}�Jˆ
Üˆv‹;˜* zÑ1°AÑ5Ò5ØØ—N‘N×-Ñ-ˆ	à”�F“˜iÑ'Ñ'ØÞ;ð
ð 	
r2   c                 óà   — |d   d   }|j                  d«       |j                  |«       |j                  t        |«      «       |D ]%  \  }}| j                  j                  ||d |d ¬«       Œ' y )Nr   r‚   rg  )r   rÌ  r>  r©   )r   r¬   rˆ   rS   ÚfirstGlyphIDÚ_r­   s          r0   r~  zAATLookup.writeFormat8Ø  sr   € Ø˜a‘y ‘|ˆØ×Ñ˜1ÔØ×Ñ˜<Ô(Ø×Ñœ3˜v›;Ô'Øò 	‰HˆAˆuØ�N‰N× Ñ Ø˜¨°EÀtð !õ ñ	r2   c                 óÚ   — t        |j                  «       «      }| j                  j                  ||d |¬«      }t	        |«      D ��ci c]  \  }}|j                  |«      |“Œ c}}S c c}}w ©N©rš   r›   )rÌ  rc  r>  r�   r¨   rZ  )r   r�   rˆ   rd  rÈ  Úkr­   s          r0   rA  zAATLookup.readFormat0â  s^   € Ü˜×*Ñ*Ó,Ó-ˆ	Ø�~‰~×'Ñ'¨°ÀÈIÐ'ÓVˆÜ<EÀd»O×L±°°5�×!Ñ! !Ó$ eÑ+ÓLÐLùÓLs   ÁA'c                 óÚ  — i }|j                   dz
  }|j                  «       |j                  «       }}|d| j                  j                  z   k\  sJ |«       ‚t	        |«      D ]ˆ  }|j                  |||z  z   dz   «       |j                  «       }|j                  «       }	| j                  j                  ||d ¬«      }
|dk7  sŒat	        |	|dz   «      D ]  }|
||j                  |«      <   Œ ŒŠ |S )Nr  râ   é   ©rš   rt  r   ©r‰   r  r>  rŸ   r˜   r…   r†   rZ  )r   r�   rˆ   Úmappingr‰   rY  rX  r‡   ÚlastÚfirstr­   r‡  s               r0   rB  zAATLookup.readFormat2ç  sò   € ØˆØ�j‰j˜1‰nˆØ#×.Ñ.Ó0°&×2CÑ2CÓ2E�(ˆØ˜1˜tŸ~™~×8Ñ8Ñ8Ò8ÐB¸(ÓBÐ8Ü�x“ò 	:ˆAØ�K‰K˜˜a (™lÑ*¨RÑ/Ô0Ø×$Ñ$Ó&ˆDØ×%Ñ%Ó'ˆEØ—N‘N×'Ñ'¨°ÀÐ'ÓEˆEØ�v‹~Ü˜u d¨Q¡hÓ/ò :�AØ49�G˜D×-Ñ-¨aÓ0Ò1ñ:ð	:ð ˆr2   c                 ó$  — i }|j                   dz
  }|j                  «       }|dk\  sJ |«       ‚t        |j                  «       «      D ]Æ  }|j                  |||z  z   dz   «       |j                  «       }|j                  «       }|j                  «       }	|dk7  sŒS|j	                  d«      }
|
j                  ||	z   «       | j
                  j                  |
|d ||z
  dz   ¬«      }t        |«      D ]  \  }}|||j                  ||z   «      <   Œ ŒÈ |S )Nr  r@  r‰  rt  r   r   r†  )	r‰   r  r˜   r…   r   r>  r�   r¨   rZ  )r   r�   rˆ   rŒ  r‰   rY  r‡   r�  rŽ  r  Ú
dataReaderrÈ  r‡  r¹  s                 r0   rC  zAATLookup.readFormat4ö  s  € ØˆØ�j‰j˜1‰nˆØ×$Ñ$Ó&ˆØ˜1Š}Ð&˜hÓ&ˆ}Ü�v×(Ñ(Ó*Ó+ò 	>ˆAØ�K‰K˜˜a (™lÑ*¨RÑ/Ô0Ø×$Ñ$Ó&ˆDØ×%Ñ%Ó'ˆEØ×&Ñ&Ó(ˆFØ�v‹~Ø#×0Ñ0°Ó3�
Ø—‘  f¡Ô-Ø—~‘~×/Ñ/Ø °¸DÀ5¹LÈ1Ñ<Lð 0ó �ô & d›Oò >‘D�A�qØ<=�G˜D×-Ñ-¨e°a©iÓ8Ò9ñ>ð	>ð ˆr2   c                 óŽ  — i }|j                   dz
  }|j                  «       }|d| j                  j                  z   k\  sJ |«       ‚t	        |j                  «       «      D ]d  }|j                  |||z  z   dz   «       |j                  «       }| j                  j                  ||d ¬«      }|dk7  sŒQ|||j                  |«      <   Œf |S )Nr  r‰  rŠ  rt  r‹  )	r   r�   rˆ   rŒ  r‰   rY  r‡   rq  r­   s	            r0   rD  zAATLookup.readFormat6
  sÈ   € ØˆØ�j‰j˜1‰nˆØ×$Ñ$Ó&ˆØ˜1˜tŸ~™~×8Ñ8Ñ8Ò8ÐB¸(ÓBÐ8Ü�v×(Ñ(Ó*Ó+ò 	<ˆAØ�K‰K˜˜a (™lÑ*¨RÑ/Ô0Ø×'Ñ'Ó)ˆGØ—N‘N×'Ñ'¨°ÀÐ'ÓEˆEØ˜&Ó Ø6;�˜×)Ñ)¨'Ó2Ò3ð	<ð ˆr2   c                 óî   — |j                  «       }|j                  «       }| j                  j                  ||d |¬«      }t        |«      D ��ci c]  \  }}|j	                  ||z   «      |“Œ c}}S c c}}w r…  )r  r>  r�   r¨   rZ  )r   r�   rˆ   rŽ  r›   rÈ  r‡  r­   s           r0   rE  zAATLookup.readFormat8  sl   € Ø×!Ñ!Ó#ˆØ×!Ñ!Ó#ˆØ�~‰~×'Ñ'¨°ÀÈEÐ'ÓRˆÜFOÐPTÃo×V¹
¸¸E�×!Ñ! %¨!¡)Ó,¨eÑ3ÓVÐVùÓVs   ÁA1c                 ó˜   — i }|D ]B  }t        |t        «      sŒ|\  }}}|dk(  sŒ | j                  j                  |||«      ||d   <   ŒD |S )NÚLookuprN  )r-   r.   r>  r·   )	r   rµ   r¶   rˆ   r­   rã  r]   ÚaÚ
eltContents	            r0   r·   zAATLookup.xmlRead  s^   € ØˆØò 	TˆGÜ˜'¤5Õ)Ø&-Ñ#��a˜Ø˜8Ó#Ø(,¯©×(>Ñ(>¸qÀ*ÈdÓ(S�E˜!˜G™*Ò%ð		Tð
 ˆr2   c           	      ó  — |j                  ||«       |j                  «        t        |j                  «       «      D ](  \  }}| j                  j                  |||dd|fg¬«       Œ* |j                  |«       |j                  «        y )Nr”  rN  )r­   r]   rµ   )ÚbegintagrÓ   rH  rí  r>  r»   Úendtag)r   rº   rˆ   r­   r]   rµ   rN  s          r0   r»   zAATLookup.xmlWrite&  s‚   € Ø×Ñ˜4 Ô'Ø×ÑÔÜ" 5§;¡;£=Ó1ò 	‰LˆE�5Ø�N‰N×#Ñ#Ø˜4 u°8ÀWÈeÐDTÐCUð $õ ð	ð 	×Ñ˜ÔØ×ÑÕr2   r,   )rU   rÄ   rÅ   rm  r€   r†   r©   rÕ   r]  rJ  r`  rK  rk  rL  rz  rM  r~  rA  rB  rC  rD  rE  r·   r»   r’   r2   r0   r:  r:  :  s}   „ ØÐàEGô 	òCó
ð@ ñ'ó ð'ò	
òò
ò(.ò
ò.ò	
òòMò
òò(òWòór2   r:  c                   ó&   — e Zd Zd„ Zdd„Zd„ Zd„ Zy)ÚAATLookupWithDataOffsetc                 ó\  — |j                  «       }|j                  «       }|j                  |«      }t        dd d t        «      }|j	                  |||«      }i }	|j                  «       D ]@  \  }
}|j                  ||z   «      }| j                  «       }|j                  ||«       ||	|
<   ŒB |	S ©NÚDataOffsets)rø   r   r:  r  r†   rí  rQ   rÑ  )r   r�   rˆ   rš   ÚlookupOffsetÚ
dataOffsetÚlookupReaderÚlookupÚoffsetsÚresultrN  r  r�  Úitems                 r0   r†   zAATLookupWithDataOffset.read9  s­   € Ø×'Ñ'Ó)ˆØ×%Ñ%Ó'ˆ
Ø×*Ñ*¨<Ó8ˆÜ˜=¨$°´fÓ=ˆØ—+‘+˜l¨D°)Ó<ˆØˆØ$Ÿ]™]›_ò 	!‰MˆE�6Ø×,Ñ,¨V°jÑ-@ÓAˆJØ—?‘?Ó$ˆDØ�N‰N˜: tÔ,Ø ˆF�5ŠMð		!ð
 ˆr2   Nc                 ó8  — i i d}}}g }	t        ||j                  ¬«      D ]s  }
t        «       }||
   j                  ||«       |j	                  «       }|j                  |d «      }|d k(  r&|}|t        |«      z   }|||<   |	j                  |«       |||
<   Œu |j                  «       }t        dd d t        «      }|j                  ||||d «       |j                  «       }|j                  |d¬«       |j                  |d¬«       |	D ]  }|j                  |«       Œ y )Nr   )Úkeyrž  râ   r  )rH  r`  r   rz   rð  rR   rÌ  rW   rï  r:  r  r©   r  rÍ  )r   r¬   rˆ   rš   r­   r²   ÚoffsetByGlyphÚoffsetByDataÚdataLenÚcompiledDatarN  r  rÈ  r  ÚlookupWriterr¢  Ú
dataWriterÚds                     r0   r©   zAATLookupWithDataOffset.writeG  s,  € ð 02°2°q W�|ˆØˆÜ˜E t§¡Ô7ò 
	*ˆEÜ%›ˆIØ�%‰L× Ñ  ¨DÔ1Ø×'Ñ'Ó)ˆDØ!×%Ñ% d¨DÓ1ˆFØ˜Š~Ø �Ø!¤C¨£IÑ-�Ø%+�˜TÑ"Ø×#Ñ# DÔ)Ø#)ˆM˜%Ò ð
	*ð ×*Ñ*Ó,ˆÜ˜=¨$°´fÓ=ˆØ�‰�\ 4¨°MÀ4ÔHà×(Ñ(Ó*ˆ
Ø×Ñ˜\°aÐÔ8Ø×Ñ˜Z°AÐÔ6Øò 	$ˆAØ× Ñ  Õ#ñ	$r2   c                 óX   — t        dd d | j                  «      }|j                  |||«      S r�  )r:  rQ   r·   )r   rµ   r¶   rˆ   r¢  s        r0   r·   zAATLookupWithDataOffset.xmlReadj  s)   € Ü˜=¨$°°d·o±oÓFˆØ�~‰~˜e W¨dÓ3Ð3r2   c                 ó^   — t        dd d | j                  «      }|j                  |||||«       y r�  )r:  rQ   r»   )r   rº   rˆ   r­   r]   rµ   r¢  s          r0   r»   z AATLookupWithDataOffset.xmlWriten  s*   € Ü˜=¨$°°d·o±oÓFˆØ�‰˜	 4¨°°eÕ<r2   r,   ©rU   rÄ   rÅ   r†   r©   r·   r»   r’   r2   r0   r›  r›  8  s   „ òó!$òF4ó=r2   r›  c                   ó¢   — e Zd ZdddddœZej	                  «       D � ��ci c]  \  }}||“Œ
 c}}} Zdddœd	„Zd
„ Zd„ Zd„ Z	d„ Z
dd„Zyc c}}} w )ÚMorxSubtableConverterÚLayoutOrderÚReversedLayoutOrderÚLogicalOrderÚReversedLogicalOrder))FF)TF©FT)TTNrh   rB   c                ó:   — t         j                  | |||||¬«       y ©NrB   )rg   r€   r~   s         r0   r€   zMorxSubtableConverter.__init__~  s"   € Ü×ÑØ�$˜  Z¸[ð 	õ 	
r2   c                 óR   — |dz  dk7  rd|_         y |dz  dk7  rd|_         y d|_         y )Né    r   ÚAnyé€   ÚVerticalÚ
Horizontal)ÚTextDirection)r   rt  Úsubtables      r0   Ú"_setTextDirectionFromCoverageFlagsz8MorxSubtableConverter._setTextDirectionFromCoverageFlagsƒ  s2   € Ø�D‰L˜QÒØ%*ˆHÕ"Ø�d‰l˜qÒ Ø%/ˆHÕ"à%1ˆHÕ"r2   c                 ó„  — |j                   }t        «       }|j                  «       |_        |j	                  «       }|dz  dk7  |dz  dk7  f}| j
                  |   |_        | j                  ||«       |j                  «       |_	        |xj                  |dz  dz  z  c_	        |j	                  «       |_
        |j                  «       |_        t        d   j                  |j                  «      }|€J d|j                  z  «       ‚|j                   |z
  }	|j                  |j                   |j                   |j                  z   |	z
   }
t        |
«      |j                  |	z
  k(  sJ ‚t!        |
|j"                  ¬«      } |«       |_        |j$                  j'                  ||«       |j)                  ||j                  z   «       |S )Nr½  r   r™  é   Úmorxz!unsupported 'morx' lookup type %s)rÈ  ÚtableTag)r‰   r"   rø   r7   r1  Ú_PROCESSING_ORDERSÚProcessingOrderrÃ  r  ÚReservedr8   ÚSubFeatureFlagsr   rR   rÈ  rÌ  r   rÇ  r=   rÑ  r…   )r   r�   rˆ   rš   r‰   rÂ   rt  ÚorderKeyrQ   ÚheaderLengthrÈ  Ú	subReaders               r0   r†   zMorxSubtableConverter.read‹  s‚  € Ø�j‰jˆÜ‹NˆØ×)Ñ)Ó+ˆŒØ× Ñ Ó"ˆØ˜T‘\ aÑ'¨%°$©,¸1Ñ)<Ð=ˆØ ×3Ñ3°HÑ=ˆÔØ×/Ñ/°°qÔ9Ø×&Ñ&Ó(ˆŒ
Ø	�
Š
�u˜s‘{ rÑ)Ñ)�
Ø×&Ñ&Ó(ˆŒØ"×,Ñ,Ó.ˆÔÜ  Ñ(×,Ñ,¨Q¯[©[Ó9ˆ
ØÐØKÐ=ÀÇÁÑKÓK�5ð —z‘z CÑ'ˆØ�{‰{˜6Ÿ:™:¨¯
©
°Q·^±^Ñ(CÀlÑ(RÐSˆÜ�4‹y˜AŸN™N¨\Ñ9Ò9Ð9Ð9Ü! t°f·o±oÔFˆ	Ù “lˆŒØ	�‰×Ñ˜i¨Ô.Ø�‰�C˜!Ÿ.™.Ñ(Ô)Øˆr2   c                 ó  — |j                  ||«       |j                  «        |j                  d|j                  z  «       |j                  «        |j	                  d|j
                  ¬«       |j                  «        |j	                  d|j                  ¬«       |j                  «        |j                  dk7  r0|j	                  dd|j                  z  ¬«       |j                  «        |j                  d|j                  z  «       |j                  «        |j	                  d	d
|j                  z  ¬«       |j                  «        |j                  j                  ||«       |j                  |«       |j                  «        y )NzStructLength=%drÁ  rË   rÉ  r   rÊ  z0x%04xzMorphType=%drË  r·  )r˜  rÓ   rF  r7   rÒ   rÁ  rÉ  rÊ  r8   rË  r=   rÖ  r™  r¹   s         r0   r»   zMorxSubtableConverter.xmlWrite¦  s?  € Ø×Ñ˜4 Ô'Ø×ÑÔØ×ÑÐ+¨e×.@Ñ.@Ñ@ÔAØ×ÑÔØ×Ñ˜O°5×3FÑ3FÐÔGØ×ÑÔØ×ÑÐ-°U×5JÑ5JÐÔKØ×ÑÔØ�>‰>˜QÒØ×Ñ 
°(¸U¿^¹^Ñ2KÐÔLØ×ÑÔØ×Ñ˜.¨5¯?©?Ñ:Ô;Ø×ÑÔØ×ÑÐ-°XÀ×@UÑ@UÑ5UÐÔVØ×ÑÔØ�‰×Ñ˜i¨Ô.Ø×Ñ˜ÔØ×ÑÕr2   c                 óÂ  — t        «       }d}d|_        t        t        |«      D �]  \  }}}|dk(  rEt	        |d   «      }|dz  dk7  |dz  dk7  f}	| j
                  |	   |_        | j                  ||«       ŒR|dk(  r7|d   |_        |j                  | j                  v rŒzJ d|j                  z  «       ‚|dk(  r-|d   |_	        |j                  d	v rŒ¬J d
|j                  z  «       ‚|dk(  rt	        |d   «      |_        ŒÙ|dk(  rt	        |d   «      |_
        Œò|j                  d«      r|j                  ||||«       �ŒJ |«       ‚ |dz  dz  |j                  z  |_        |S )Nr   ÚCoverageFlagsr­   r½  r™  rÉ  zunknown ProcessingOrder: %srÁ  >   r½  r¿  rÀ  zunknown TextDirection %srÊ  rË  ÚMorphrÅ  )r"   rÊ  rI  Úistupler   rÈ  rÉ  rÃ  Ú_PROCESSING_ORDERS_REVERSEDrÁ  rË  rI   rß  )
r   rµ   r¶   rˆ   rÂ   ÚcovFlagsÚeltNameÚeltAttrsr–  rÌ  s
             r0   r·   zMorxSubtableConverter.xmlReadº  s‰  € Ü‹NˆØˆØˆŒ
Ü-3´G¸WÓ-Eó 	&Ñ)ˆG�X˜zØ˜/Ò)ä# H¨WÑ$5Ó6�Ø%¨™_°Ñ2°XÀ±_ÈÑ4JÐK�Ø$(×$;Ñ$;¸HÑ$E�Ô!Ø×7Ñ7¸À!ÕDØÐ-Ò-Ø$,¨WÑ$5�Ô!Ø×(Ñ(¨D×,LÑ,LÒLð Ø1°A×4EÑ4EÑEóÐLð ˜OÒ+Ø"*¨7Ñ"3�”Ø—‘Ð*KÒKð Ø.°·±Ñ@óÐKð ˜JÒ&Ü% h¨wÑ&7Ó8�•
ØÐ-Ò-Ü$,¨X°gÑ->Ó$?�Õ!Ø×!Ñ! 'Ô*Ø—	‘	˜' 8¨Z¸Ö>à%˜gÓ%�uð1	&ð2  ‘n¨Ñ+¨a¯j©jÑ8ˆŒ
Øˆr2   c                 óH  — |j                   dz  dz	  }| j                  |j                     \  }}||j                  dk(  rdndz  }||rdndz  }||j                  dk(  rdndz  }||rdndz  }||_        t        |j                  «      }	|j                  «       }
d	|_        |j                   }|j                   d
z  |_         |j                  ||«       ||_         |j                  |	   dk(  sJ ‚|j                  «       |
z
  }t        j                  d|«      |j                  |	<   y )Ni   r™  r¿  r¾  r   r½  r½  r¼  rë  rt  rì  z>L)rÊ  rÔ  rÉ  rÁ  rÑ  rÌ  rí  rî  r7   rz   ÚstructÚpack)r   r¬   rˆ   rš   r­   r²   rÕ  ÚreverseOrderÚlogicalOrderrò  rô  ÚorigReservedrõ  s                r0   r©   zMorxSubtableConverter.writeÚ  s#  € Ø—N‘N ZÑ/°BÑ6ˆØ%)×%EÑ%EØ×!Ñ!ñ&
Ñ"ˆ�lð 	˜E×/Ñ/°:Ò=‘DÀ1ÑDˆØ™L‘D¨aÑ/ˆØ˜E×/Ñ/°5Ò8‘D¸aÑ?ˆØ™L‘D¨aÑ/ˆØ&ˆÔÜ˜&Ÿ,™,Ó'ˆØ×%Ñ%Ó'ˆØ'ˆÔð —~‘~ˆØŸ™¨&Ñ0ˆŒØ�‰�f˜dÔ#Ø%ˆŒØ�|‰|˜KÑ(Ð,?Ò?Ð?Ð?Ø×%Ñ%Ó'¨&Ñ0ˆÜ$*§K¡K°°fÓ$=ˆ�‰�[Ò!r2   r,   )rU   rÄ   rÅ   rÈ  rí  rÔ  r€   rÃ  r†   r»   r·   r©   )r“   r§  rO  s   000r0   r³  r³  s  sm   „ ð &Ø,Ø%Ø,ñÐð =O×<TÑ<TÓ<V×"WÐ"W±°°S 3¨¡8Ô"WÐð
È"ô 
ò
2òò6ò(ô@>ùô} #Xs    A
r³  c                   óz   — e Zd Zddœd„Zd„ Zd„ Zd„ Zd„ Zd„ Zdd
„Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy	)Ú	STXHeaderrh   rB   c                ó  — t         j                  | |||||¬«       t        | j                  t        «      sJ ‚t        dd d t        «      | _        t        | j                  t        «      rt        dd d t        «      | _
        y d | _
        y )NrB   ÚGlyphClassesÚPerGlyphLookup)rg   r€   r=  rQ   r   r:  r  ÚclassLookupr   rT  ÚperGlyphLookupr~   s         r0   r€   zSTXHeader.__init__õ  sv   € Ü×ÑØ�$˜  Z¸[ð 	ô 	
ô ˜$Ÿ/™/¬9Ô5Ð5Ð5Ü$ ^°T¸4ÄÓHˆÔÜ�d—o‘oÔ'<Ô=Ü"+Ð,<¸dÀDÌ'Ó"RˆDÕà"&ˆDÕr2   c                 ó¦  — t        «       }|j                  }|j                  d«      }|j                  d«      }|j                  d«      }d }	d }
|j                  «       |_        |j                  ||j                  «       z   «       |j                  ||j                  «       z   «       |j                  ||j                  «       z   «       | j                  �3|j                  d«      }|j                  ||j                  «       z   «       t        | j                  t        «      rê|j                  d«      }	|	j                  ||j                  «       z   «       |j                  d«      }|j                  ||j                  «       z   «       |j                  d«      }
|
j                  ||j                  «       z   «       |
j                  |j                  z
  dz  }|dk\  sJ ‚|j                  |«      |_        | j                  |
|«      |_        nMt        | j                  t        «      r3|j                  d«      }	|	j                  ||j                  «       z   «       | j                  j!                  |||«      |_        t%        |j                  |j                  z
  |j                  dz  z  «      }t'        |«      D ]r  }t)        «       }|j*                  j-                  |«       t'        |j                  «      D ]3  }|j/                  «       }| j1                  ||||	«      |j2                  |<   Œ5 Œt | j                  �| j5                  ||«      |_        |S )Nr   r  )r   r‰   r   rø   ÚGlyphClassCountr…   rä  r=  rQ   r    r  ÚLigComponentsÚ_readLigaturesÚ	Ligaturesr!   rã  r†   rá  rÀ   r˜   r   ÚStatesrW   r  Ú_readTransitionÚTransitionsÚ_readPerGlyphLookupsÚPerGlyphLookups)r   r�   rˆ   rš   rÒ  r‰   ÚclassTableReaderÚstateArrayReaderÚentryTableReaderÚactionReaderÚligaturesReaderÚperGlyphTableReaderÚligComponentReaderÚnumLigComponentsÚ	numStatesÚ
stateIndexÚstateÚ
glyphClassÚ
entryIndexs                      r0   r†   zSTXHeader.read   s	  € Ü“ˆØ�j‰jˆØ!×.Ñ.¨qÓ1ÐØ!×.Ñ.¨qÓ1ÐØ!×.Ñ.¨qÓ1ÐØˆØˆØ &× 0Ñ 0Ó 2ˆÔØ×Ñ˜c F×$4Ñ$4Ó$6Ñ6Ô7Ø×Ñ˜c F×$4Ñ$4Ó$6Ñ6Ô7Ø×Ñ˜c F×$4Ñ$4Ó$6Ñ6Ô7Ø×ÑÐ*Ø"(×"5Ñ"5°aÓ"8ÐØ×$Ñ$ S¨6×+;Ñ+;Ó+=Ñ%=Ô>Ü�d—o‘oÔ':Ô;Ø!×.Ñ.¨qÓ1ˆLØ×Ñ˜c F×$4Ñ$4Ó$6Ñ6Ô7Ø!'×!4Ñ!4°QÓ!7ÐØ×#Ñ# C¨&×*:Ñ*:Ó*<Ñ$<Ô=Ø$×1Ñ1°!Ó4ˆOØ× Ñ   v×'7Ñ'7Ó'9Ñ!9Ô:Ø /× 3Ñ 3Ð6H×6LÑ6LÑ LÐQRÑRÐØ# qÒ(Ð(Ð(Ø"4×"DÑ"DÐEUÓ"VˆEÔØ"×1Ñ1°/À4ÓHˆE�OÜ˜Ÿ™Ô)=Ô>Ø!×.Ñ.¨qÓ1ˆLØ×Ñ˜c F×$4Ñ$4Ó$6Ñ6Ô7Ø!×-Ñ-×2Ñ2Ð3CÀTÈ9ÓUˆÔÜØ×!Ñ!Ð$4×$8Ñ$8Ñ8¸U×=RÑ=RÐUVÑ=VÑWó
ˆ	ô   	Ó*ò 	ˆJÜ“JˆEØ�L‰L×Ñ Ô&Ü# E×$9Ñ$9Ó:ò �
Ø-×8Ñ8Ó:�
Ø04×0DÑ0DØ$ j°$¸ó1�×!Ñ! *Ò-ñð	ð ×ÑÐ*Ø$(×$=Ñ$=ØÐ*¨Dó%ˆEÔ!ð ˆr2   c                 ó¢   — | j                  «       }|j                  |j                  ||j                  z  z   «      }|j	                  |||«       |S r,   )rQ   r   r‰   rŸ   rÑ  )r   r�   rû  rˆ   rò  Ú
transitionÚentryReaders          r0   rë  zSTXHeader._readTransition/  sO   € Ø—_‘_Ó&ˆ
Ø×)Ñ)Ø�J‰J˜ j×&;Ñ&;Ñ;Ñ;ó
ˆð 	×Ñ˜[¨$°Ô=ØÐr2   c                 ó�   — t        |j                  «      }||j                  z
  dz  }|j                  |j	                  |«      «      S r1  )rÌ  rÈ  r‰   rW  r  )r   r�   rˆ   ÚlimitÚnumLigatureGlyphss        r0   rè  zSTXHeader._readLigatures7  sA   € Ü�F—K‘KÓ ˆØ" V§Z¡ZÑ/°AÑ5ÐØ×$Ñ$ V×%;Ñ%;Ð<MÓ%NÓOÐOr2   c                 ó.  — d}|j                   D ]ƒ  }|j                  j                  «       D ]d  }t        |t        «      sŒ|j
                  dk7  rt        ||j
                  dz   «      }|j                  dk7  sŒLt        ||j                  dz   «      }Œf Œ… |S )Nr   rt  r   )rê  rì  rS   r-   r   Ú	MarkIndexÚmaxÚCurrentIndex)r   rÒ  Ú
numLookupsrù  r/   s        r0   Ú_countPerGlyphLookupszSTXHeader._countPerGlyphLookups<  s’   € ð
 ˆ
Ø—\‘\ò 	IˆEØ×&Ñ&×-Ñ-Ó/ò I�Ü˜aÔ!6Õ7Ø—{‘{ fÒ,Ü%(¨°Q·[±[À1±_Ó%E˜
Ø—~‘~¨Ó/Ü%(¨°Q·^±^ÀaÑ5GÓ%H™
ñIð	Ið Ðr2   c                 ó  — |j                   }g }t        | j                  |«      «      D ]a  }|j                  d«      }|j	                  ||j                  «       z   «       |j                  | j                  j                  ||i «      «       Œc |S rÞ   )	r‰   r˜   r  r   r…   rø   rW   rä  r†   )r   rÒ  r�   rˆ   r‰   Úlookupsrƒ  r¡  s           r0   rí  zSTXHeader._readPerGlyphLookupsK  s…   € Ø�j‰jˆØˆÜ�t×1Ñ1°%Ó8Ó9ò 	MˆAØ!×.Ñ.¨qÓ1ˆLØ×Ñ˜c F×$4Ñ$4Ó$6Ñ6Ô7Ø�N‰N˜4×.Ñ.×3Ñ3°LÀ$ÈÓKÕLð	Mð ˆr2   Nc                 ód  — t        «       }| j                  j                  ||||j                  d ¬«       t	        |j                  «       d«      }t        |j                  j                  «       «      dz   }d}	| j                  �|	dz  }	|	| j                  j                  z  }	| j                  j                  ||j                  «      \  }
}| j                  ||j                  ||«      \  }}|	t        |«      z   }|t        |«      z   }|t        |«      z   }t	        | j                  ||«      d«      }|
�|t        |«      z   }nd }d\  }}| j!                  ||«      }| j#                  ||«      }|�,t        |«      dk(  sJ ‚|t        |
«      z   }|t        |«      z   }|j%                  |«       |j%                  |	«       |j%                  |«       |j%                  |«       | j                  �|j%                  |«       |�|j%                  |«       |�"|j%                  |«       |j%                  |«       |j'                  |«       |j'                  |«       |j'                  |«       |j'                  |«       |
�|j'                  |
«       |�|j'                  |«       |�|j'                  |«       y y )N)r²   r  r   r™  râ   )NNr   )r   rã  r©   rá  r   rð  r  rS   rä  rQ   ÚactionHeaderSizeÚcompileActionsrê  Ú_compileStatesrÌ  Ú_compilePerGlyphLookupsÚ_compileLigComponentsÚ_compileLigaturesrÿ   rÍ  )r   r¬   rˆ   rš   r­   r²   ÚglyphClassWriterÚglyphClassDataÚglyphClassCountÚglyphClassTableOffsetÚ
actionDataÚactionIndexÚstateArrayDataÚentryTableDataÚstateArrayOffsetÚentryTableOffsetÚperGlyphOffsetÚperGlyphDataÚactionOffsetÚligaturesOffsetÚligComponentsOffsetÚligComponentsDataÚligaturesDatas                          r0   r©   zSTXHeader.writeT  s¯  € Ü(›?ÐØ×Ñ×ÑØ˜d I¨u×/AÑ/AÈtð 	ô 	
ô Ð-×8Ñ8Ó:¸AÓ>ˆÜ˜e×0Ñ0×7Ñ7Ó9Ó:¸QÑ>ˆØ "ÐØ×ÑÐ*Ø! QÑ&Ð!à §¡×!AÑ!AÑAÐØ"&§/¡/×"@Ñ"@ÀÀuÇ|Á|Ó"TÑˆ
�KØ)-×)<Ñ)<Ø�%—,‘, °ó*
Ñ&ˆ˜ð 1´3°~Ó3FÑFÐØ+¬c°.Ó.AÑAÐØ)¬C°Ó,?Ñ?ˆÜ˜4×7Ñ7¸¸tÓDÀaÓHˆØÐ!Ø+¬c°.Ó.AÑA‰LàˆLà/9Ñ,ˆÐ,Ø ×6Ñ6°u¸dÓCÐØ×.Ñ.¨u°dÓ;ˆØÐ(Ü�|Ó$¨Ò)Ð)Ð)Ø".´°Z³Ñ"@ÐØ1´CÐ8IÓ4JÑJˆOà×Ñ˜/Ô*Ø×ÑÐ/Ô0Ø×ÑÐ*Ô+Ø×ÑÐ*Ô+Ø×ÑÐ*Ø×Ñ˜nÔ-ØÐ#Ø×Ñ˜lÔ+ØÐ*Ø×ÑÐ1Ô2Ø×Ñ˜oÔ.Ø×Ñ˜Ô(Ø×Ñ˜Ô(Ø×Ñ˜Ô(Ø×Ñ˜Ô&ØÐ!Ø×Ñ˜ZÔ(ØÐ(Ø×ÑÐ.Ô/ØÐ$Ø×Ñ˜]Õ+ð %r2   c           	      ó6  — t        «       }g i }}|D ]Ô  }t        |«      D ]Ä  }	|j                  |	   }
t        «       }|
j                  |||«       |j	                  «       }t        |«      |
j                  k(  s)J dt        |
«      |
j                  t        |«      fz  «       ‚|j                  |«      }|€!t        |«      }|||<   |j                  |«       |j                  |«       ŒÆ ŒÖ t        |j	                  «       d«      }t        t        |«      d«      }||fS )Nz1%s has staticSize %d, but actually wrote %d bytesrâ   )r   r˜   rì  rz   rð  rÌ  rŸ   rå  rR   rW   r   r   r   )r   rˆ   Ústatesr  r  ÚstateArrayWriterÚentriesÚentryIDsrù  rú  rý  ÚentryWriterÚ	entryDatarû  r  r  s                   r0   r  zSTXHeader._compileStates‹  s)  € Ü(›?ÐØ �ˆØò 	9ˆEÜ# OÓ4ò 9�
Ø"×.Ñ.¨zÑ:�
Ü+›o�Ø×"Ñ" ;°°kÔBØ'×2Ñ2Ó4�	ä˜	“N j×&;Ñ&;Ò;ðàIÜ˜Ó$Ø×)Ñ)Ü˜	“NðMñ óØ;ð &Ÿ\™\¨)Ó4�
ØÐ%Ü!$ W£�JØ*4�H˜YÑ'Ø—N‘N 9Ô-Ø ×,Ñ,¨ZÕ8ñ#9ð	9ô& Ð-×8Ñ8Ó:¸AÓ>ˆÜœY wÓ/°Ó3ˆØ˜~Ð-Ð-r2   c                 ó†  — | j                   €y| j                  |«      }t        |j                  «      |k(  sJ dt        |j                  «      |fz  «       ‚t	        «       }|j                  D ]D  }|j                  «       }| j                   j                  ||i |d «       |j                  |d¬«       ŒF |j                  «       S )Nr2   zVlen(AATStateTable.PerGlyphLookups) is %d, but the actions inside the table refer to %drâ   r  )	rä  r  rÌ  rî  r   rï  r©   r  rð  )r   rÒ  rˆ   r  r¬   r¢  r¬  s          r0   r  z!STXHeader._compilePerGlyphLookups¥  sÊ   € Ø×ÑÐ&ØØ×/Ñ/°Ó6ˆ
Ü�5×(Ñ(Ó)¨ZÒ7ð 	
ð;ä�5×(Ñ(Ó)¨:Ð6ñ7ó	
Ð7ô
 “ˆØ×+Ñ+ò 	=ˆFØ!×.Ñ.Ó0ˆLØ×Ñ×%Ñ% l°D¸"¸fÀdÔKØ× Ñ  ¸!Ð Õ<ð	=ð × Ñ Ó"Ð"r2   c                 ó”   — t        |d«      sy t        «       }|j                  D ]  }|j                  |«       Œ |j	                  «       S )Nrç  )r    r   rç  r   rð  )r   rÒ  rˆ   r¬   Ú	components        r0   r  zSTXHeader._compileLigComponentsµ  sH   € Ü�u˜oÔ.ØÜ“ˆØ×,Ñ,ò 	*ˆIØ×Ñ˜yÕ)ð	*à× Ñ Ó"Ð"r2   c                 ó²   — t        |d«      sy t        «       }|j                  D ]"  }|j                  |j	                  |«      «       Œ$ |j                  «       S )Nré  )r    r   ré  r   r`  rð  )r   rÒ  rˆ   r¬   Ú	glyphNames        r0   r  zSTXHeader._compileLigatures½  sO   € Ü�u˜kÔ*ØÜ“ˆØŸ™ò 	;ˆIØ×Ñ˜tŸ™¨yÓ9Õ:ð	;à× Ñ Ó"Ð"r2   c                 ó^  — |j                  ||«       |j                  «        |j                  d|j                  z  «       |j                  «        t	        |j
                  j                  «       «      D ])  \  }}|j                  d||¬«       |j                  «        Œ+ t        |j                  «      D ]‹  \  }}	|j                  d|¬«       |j                  «        t	        |	j                  j                  «       «      D ]  \  }
}|j                  ||d|
id¬«       Œ |j                  d«       |j                  «        Œ� t        |j                  «      D ]Ž  \  }}|j                  d	|¬«       |j                  «        t	        |j                  «       «      D ])  \  }}|j                  d
||¬«       |j                  «        Œ+ |j                  d	«       |j                  «        Œ� t        |d«      rƒ|j                  d«       |j                  «        t        t        |d«      «      D ])  \  }}|j                  d||¬«       |j                  «        Œ+ |j                  d«       |j                  «        | j!                  |||||«       |j                  |«       |j                  «        y )NzGlyphClassCount=%sÚ
GlyphClass©rN  r­   ÚState)ÚindexÚonGlyphClassÚ
Transition)rˆ   rµ   r]   râ  r”  rç  ÚLigComponent)r2  r­   )r˜  rÓ   rF  ræ  rH  rá  rí  rÒ   r¨   rê  rì  rÖ  r™  rî  r    r…  Ú_xmlWriteLigatures)r   rº   rˆ   r­   r]   rµ   ÚgÚklassrø  rù  rú  Útransr‡   r¢  rN  rO  s                   r0   r»   zSTXHeader.xmlWriteÅ  s~  € Ø×Ñ˜4 Ô'Ø×ÑÔØ×ÑÐ.°×1FÑ1FÑFÔGØ×ÑÔÜ˜u×1Ñ1×7Ñ7Ó9Ó:ò 	 ‰HˆAˆuØ×Ñ °A¸UÐÔCØ×ÑÕð	 ô "+¨5¯<©<Ó!8ò 	 ÑˆJ˜Ø×Ñ˜w¨jÐÔ9Ø×ÑÔÜ%+¨E×,=Ñ,=×,CÑ,CÓ,EÓ%Fò Ñ!�
˜EØ—‘ØØØ)¨:Ð6Ø%ð	 õ ðð ×Ñ˜WÔ%Ø×ÑÕð	 ô # 5×#8Ñ#8Ó9ò 	 ‰IˆAˆvØ×ÑÐ/°qÐÔ9Ø×ÑÔÜ$ V§\¡\£^Ó4ò $‘
��sØ×#Ñ# H°EÀÐ#ÔEØ×!Ñ!Õ#ð$ð ×ÑÐ-Ô.Ø×ÑÕð	 ô �5˜/Ô*Ø×Ñ˜Ô/Ø×ÑÔÜ#¤G¨E°?Ó$CÓDò $‘��3Ø×#Ñ# N¸!À3Ð#ÔGØ×!Ñ!Õ#ð$ð ×Ñ˜_Ô-Ø×ÑÔØ×Ñ 	¨4°¸¸eÔDØ×Ñ˜ÔØ×ÑÕr2   c                 ó$  — t        |d«      sy |j                  d«       |j                  «        t        t	        |d«      «      D ])  \  }}|j                  d||¬«       |j                  «        Œ+ |j                  d«       |j                  «        y )Nré  ÚLigature)r2  rN  )r    r˜  rÓ   r¨   r…  rÒ   r™  )r   rº   rˆ   r­   r]   rµ   r‡   r7  s           r0   r6  zSTXHeader._xmlWriteLigaturesí  s…   € Ü�u˜kÔ*ØØ×Ñ˜;Ô'Ø×ÑÔÜœg e¨[Ó9Ó:ò 	 ‰DˆAˆqØ×Ñ 
°!¸1ÐÔ=Ø×ÑÕð	 ð 	×Ñ˜Ô%Ø×ÑÕr2   c                 óN  — t        «       }t        t        |«      D ]Ü  \  }}}|dk(  r#|d   }|d   }	t        |	«      |j                  |<   Œ/|dk(  r/| j                  |||«      }
|j                  j                  |
«       Œc|dk(  r9| j                  j                  |||«      }|j                  j                  |«       Œ¡|dk(  r| j                  |||«      |_        Œ¿|dk(  sŒÅ| j                  |||«      |_        ŒÞ t        |j                  j!                  «       «      dz   |_        |S )	Nr/  rN  r­   r1  râ  rç  ré  r   )r   rI  rÓ  r   rá  Ú_xmlReadStaterê  rW   rä  r·   rî  Ú_xmlReadLigComponentsrç  Ú_xmlReadLigaturesré  r  rS   ræ  )r   rµ   r¶   rˆ   rÒ  rÖ  r×  r–  rN  r­   rù  r¢  s               r0   r·   zSTXHeader.xmlReadø  s'  € Ü“ˆÜ-3´G¸WÓ-Eò 	UÑ)ˆG�X˜zØ˜,Ò&Ø  Ñ)�Ø  Ñ)�Ü,4°U«O�×"Ñ" 5Ò)Ø˜GÒ#Ø×*Ñ*¨8°ZÀÓF�Ø—‘×#Ñ# EÕ*ØÐ,Ò,Ø×,Ñ,×4Ñ4°X¸zÈ4ÓP�Ø×%Ñ%×,Ñ,¨VÕ4Ø˜OÒ+Ø&*×&@Ñ&@Ø˜j¨$ó'�Õ#ð ˜KÓ'Ø"&×"8Ñ"8¸À:ÈtÓ"T�•ð!	Uô" !$ E×$6Ñ$6×$=Ñ$=Ó$?Ó @À1Ñ DˆÔØˆr2   c                 óÚ   — t        «       }t        t        |«      D ]M  \  }}}|dk(  sŒt        |d   «      }| j	                  «       }	|	j                  ||||«       |	|j                  |<   ŒO |S )Nr4  r3  )r   rI  rÓ  r   rQ   rß  rì  )
r   rµ   r¶   rˆ   rù  rÖ  r×  r–  rú  rý  s
             r0   r=  zSTXHeader._xmlReadState  st   € Ü“
ˆÜ-3´G¸WÓ-Eò 	;Ñ)ˆG�X˜zØ˜,Ó&Ü% h¨~Ñ&>Ó?�
Ø!Ÿ_™_Ó.�
Ø×"Ñ" 7¨H°jÀ$ÔGØ0:�×!Ñ! *Ò-ð	;ð ˆr2   c                 ó‚   — g }t        t        |«      D ])  \  }}}|dk(  sŒ|j                  t        |d   «      «       Œ+ |S )Nr5  r­   )rI  rÓ  rW   r   )r   rµ   r¶   rˆ   ÚligComponentsrÖ  r×  Ú_eltContents           r0   r>  zSTXHeader._xmlReadLigComponents  sN   € ØˆÜ.4´W¸gÓ.Fò 	BÑ*ˆG�X˜{Ø˜.Ó(Ø×$Ñ$¤X¨h°wÑ.?Ó%@ÕAð	Bð Ðr2   c                 óp   — g }t        t        |«      D ]   \  }}}|dk(  sŒ|j                  |d   «       Œ" |S )Nr;  rN  )rI  rÓ  rW   )r   rµ   r¶   rˆ   ÚligsrÖ  r×  rC  s           r0   r?  zSTXHeader._xmlReadLigatures  sD   € ØˆÜ.4´W¸gÓ.Fò 	/Ñ*ˆG�X˜{Ø˜*Ó$Ø—‘˜H WÑ-Õ.ð	/ð ˆr2   r,   )rU   rÄ   rÅ   r€   r†   rë  rè  r  rí  r©   r  r  r  r  r»   r6  r·   r=  r>  r?  r’   r2   r0   rß  rß  ô  s^   „ ØEGô 	'ò-ò^òPò
òó5,òn.ò4#ò #ò#ò&òP	òò,òór2   rß  c                   ó&   — e Zd Zd„ Zdd„Zd„ Zd„ Zy)ÚCIDGlyphMapc                 ó¢   — |j                  «       }i }t        |j                  |«      «      D ]  \  }}|dk7  sŒ|j                  |«      ||<   Œ! |S )Nrt  )r  r¨   r  rZ  )r   r�   rˆ   rš   ÚnumCIDsr¤  Úcidrq  s           r0   r†   zCIDGlyphMap.read(  s[   € Ø×#Ñ#Ó%ˆØˆÜ% f×&<Ñ&<¸WÓ&EÓFò 	9‰LˆC�Ø˜&Ó Ø"×/Ñ/°Ó8��s’ð	9ð ˆr2   Nc                 ó  — |j                  «       D ��ci c]  \  }}||j                  |«      “Œ }}}|rt        |«      dz   nd}	|j                  |	«       t	        |	«      D ]#  }|j                  |j                  |d«      «       Œ% y c c}}w )Nr   r   rt  ©rí  r`  r  r   r˜   rR   )
r   r¬   rˆ   rš   r­   r²   rJ  rN  rí  r›   s
             r0   r©   zCIDGlyphMap.write0  s~   € Ø?D¿{¹{»}×M±°°e��d—o‘o eÓ,Ñ,ÐMˆÑMÙ"'”�E“
˜Q’¨QˆØ×Ñ˜5Ô!Ü˜“<ò 	7ˆCØ×Ñ˜uŸy™y¨¨fÓ5Õ6ñ	7ùó Ns   ”Bc                 óŒ   — i }t        t        |«      D ].  \  }}}|dk(  sŒ|d   j                  «       |t        |d   «      <   Œ0 |S )NÚCIDrN  rJ  )rI  rÓ  Ústripr   ©r   rµ   r¶   rˆ   r¤  ÚeNameÚeAttrsÚ	_eContents           r0   r·   zCIDGlyphMap.xmlRead7  sT   € ØˆÜ(.¬w¸Ó(@ò 	JÑ$ˆE�6˜9Ø˜‹~Ø28¸±/×2GÑ2GÓ2I�”x  u¡Ó.Ò/ð	Jð ˆr2   c                 ó&  — |j                  ||«       |j                  «        t        |j                  «       «      D ]2  \  }}|€Œ	|dk7  sŒ|j	                  d||¬«       |j                  «        Œ4 |j                  |«       |j                  «        y )Nrt  rN  )rJ  rN  ©r˜  rÓ   rH  rí  rÒ   r™  )r   rº   rˆ   r­   r]   rµ   rJ  rN  s           r0   r»   zCIDGlyphMap.xmlWrite>  s…   € Ø×Ñ˜4 Ô'Ø×ÑÔÜ  §¡£Ó/ò 	$‰JˆC�ØÑ  U¨f£_Ø×#Ñ# E¨s¸%Ð#Ô@Ø×!Ñ!Õ#ð	$ð 	×Ñ˜ÔØ×ÑÕr2   r,   r±  r’   r2   r0   rG  rG  '  s   „ òó7òór2   rG  c                   ó&   — e Zd Zd„ Zdd„Zd„ Zd„ Zy)ÚGlyphCIDMapc                 óL  — |j                  «       }|j                  «       }|j                  |«      }|t        |«      kD  r#t        j                  d|t        |«      fz  «       i }t        t        t        |«      t        |«      «      «      D ]  }||   }	|	dk7  sŒ|	|||   <   Œ |S )NzOGlyphCIDMap has %d elements, but the font has only %d glyphs; ignoring the restrt  )rc  r  r  rÌ  ri  rj  r˜   Úmin)
r   r�   rˆ   rš   Ú
glyphOrderr›   Úcidsr¤  rq  rJ  s
             r0   r†   zGlyphCIDMap.readJ  s¬   € Ø×'Ñ'Ó)ˆ
Ø×!Ñ!Ó#ˆØ×%Ñ% eÓ,ˆØ”3�z“?Ò"Ü�K‰Kð$à',¬c°*«oÐ&>ñ?ôð
 ˆÜœS¤ T£¬C°
«OÓ<Ó=ò 	2ˆGØ�w‘-ˆCØ�f‹}Ø.1��z 'Ñ*Ò+ð	2ð ˆr2   Nc                 ó*  — |j                  «       D ��ci c]  \  }}|�|dk7  r|j                  |«      |“Œ  }}}|rt        |«      dz   nd}	|j                  |	«       t	        |	«      D ]#  }
|j                  |j                  |
d«      «       Œ% y c c}}w )Nrt  r   r   rL  )r   r¬   rˆ   rš   r­   r²   r7  rJ  rí  r›   rq  s              r0   r©   zGlyphCIDMap.write[  s–   € ð  Ÿ+™+›-÷
á��3Øˆ 3¨&¢=ð �O‰O˜AÓ Ñ#ð
ˆñ 
ñ
 #(”�E“
˜Q’¨QˆØ×Ñ˜5Ô!Ü˜U“|ò 	;ˆGØ×Ñ˜uŸy™y¨°&Ó9Õ:ñ	;ùó
s   ”#Bc                 óp   — i }t        t        |«      D ]   \  }}}|dk(  sŒt        |d   «      ||d   <   Œ" |S )NrN  r­   rN  )rI  rÓ  r   rP  s           r0   r·   zGlyphCIDMap.xmlReadf  sK   € ØˆÜ(.¬w¸Ó(@ò 	DÑ$ˆE�6˜9Ø˜‹~Ü*2°6¸'±?Ó*C��v˜g‘Ò'ð	Dð ˆr2   c                 ó&  — |j                  ||«       |j                  «        t        |j                  «       «      D ]2  \  }}|€Œ	|dk7  sŒ|j	                  d||¬«       |j                  «        Œ4 |j                  |«       |j                  «        y )Nrt  rN  r0  rU  )r   rº   rˆ   r­   r]   rµ   rN  rJ  s           r0   r»   zGlyphCIDMap.xmlWritem  s„   € Ø×Ñ˜4 Ô'Ø×ÑÔÜ  §¡£Ó/ò 	$‰JˆE�3Ø‰ 3¨&£=Ø×#Ñ# E°¸cÐ#ÔBØ×!Ñ!Õ#ð	$ð 	×Ñ˜ÔØ×ÑÕr2   r,   r±  r’   r2   r0   rW  rW  I  s   „ òó"	;òór2   rW  c                   ó&   — e Zd Zd„ Zdd„Zd„ Zd„ Zy)Ú
DeltaValuec                 ó*  — |d   }|d   }|d   }|dv sJ d«       ‚||z
  dz   }d|z  }d|z  }	d|z  dz
  }
d|dz
  z  }g }d\  }}t        |«      D ]A  }|dk(  r|j                  «       d	}}||z
  }||z	  |
z  }||z  r||	z
  }|j                  |«       ŒC |S )
NÚ	StartSizeÚEndSizeÚDeltaFormat©r   r  r:  úillegal DeltaFormatr   )r   r   r   r™  )r˜   r  rW   )r   r�   rˆ   rš   rb  rc  rd  ÚnItemsÚnBitsÚminusOffsetÚmaskÚsignMaskr`  ÚtmpÚshiftr‡   r­   s                    r0   r†   zDeltaValue.ready  së   € Ø˜kÑ*ˆ	Ø˜IÑ&ˆØ Ñ.ˆØ˜iÑ'Ð>Ð)>Ó>Ð'Ø˜9Ñ$ qÑ(ˆØ�[Ñ ˆØ˜5‘jˆØ�U‘
˜aÑˆØ˜ ™Ñ#ˆàˆ
Ø‰
ˆˆUÜ�v“ò 	%ˆAØ˜ŠzØ#×.Ñ.Ó0°"�U�Ø˜E‘MˆEØ˜E‘\ TÑ)ˆEØ�xÒØ Ñ+�Ø×Ñ˜eÕ$ð	%ð Ðr2   Nc                 ó$  — |d   }|d   }|d   }|}	|dv sJ d«       ‚||z
  dz   }
d|z  }t        |	«      |
k(  sJ ‚d|z  dz
  }d\  }}|	D ].  }||z
  }|||z  |z  z  }|dk(  sŒ|j                  |«       d\  }}Œ0 |d	k7  r|j                  |«       y y )
Nrb  rc  rd  re  rf  r   )r   r™  r   r™  )rÌ  r   )r   r¬   rˆ   rš   r­   r²   rb  rc  rd  r`  rg  rh  rj  rl  rm  s                  r0   r©   zDeltaValue.write�  sà   € Ø˜kÑ*ˆ	Ø˜IÑ&ˆØ Ñ.ˆØˆ
Ø˜iÑ'Ð>Ð)>Ó>Ð'Ø˜9Ñ$ qÑ(ˆØ�[Ñ ˆÜ�:‹ &Ò(Ð(Ð(Ø�U‘
˜aÑˆà‰
ˆˆUØò 	#ˆEØ˜E‘MˆEØ˜% $™,¨5Ñ0Ñ1ˆCØ˜‹zØ×"Ñ" 3Ô'Ø"‘
�‘Uð	#ð �BŠ;Ø×Ñ˜sÕ#ð r2   c                 óT   — |j                  ||d|fgz   «       |j                  «        y rÑ   ©rÒ   rÓ   r¹   s         r0   r»   zDeltaValue.xmlWrite¥  ó+   € Ø×Ñ˜D %¨G°UÐ+;Ð*<Ñ"<Ô=Ø×ÑÕr2   c                 ó   — t        |d   «      S rÑ   ©r   r´   s       r0   r·   zDeltaValue.xmlRead©  ó   € Ü˜˜g™Ó'Ð'r2   r,   ©rU   rÄ   rÅ   r†   r©   r»   r·   r’   r2   r0   r`  r`  x  s   „ òó.$ò*ó(r2   r`  c                   ó   — e Zd Zd„ Zdd„Zy)ÚVarIdxMapValuec                 ó  — |d   }|d   }d|dz  z   }d|z  dz
  }d|z
  }d|z
  }	d|dz  dz	  z   }
|j                   |j                  |j                  |j                  d	œ|
   } ||«      D �cg c]  }||z  |	z  ||z  z  ‘Œ c}S c c}w )
NÚEntryFormatrr   r   rÅ  l   ÿÿ r™  é0   râ   ©r   r  r:  râ   ©r3  r  ÚreadUInt24Arrayrû   )r   r�   rˆ   rš   Úfmtrg  Ú	innerBitsÚ	innerMaskÚ	outerMaskÚ
outerShiftÚ	entrySizer�   Úraws                r0   r†   zVarIdxMapValue.read®  sÆ   € Ø˜Ñ&ˆØ˜>Ñ*ˆà˜˜v™Ñ&ˆ	Ø˜)‘^ qÑ(ˆ	Ø Ñ*ˆ	Ø˜)‘^ˆ
à˜# ™,¨1Ñ,Ñ-ˆ	à×$Ñ$Ø×%Ñ%Ø×%Ñ%Ø×$Ñ$ñ	
ð
 ñˆ	ñ ! Ó(ö
àð �Y‰ :Ñ-°#¸	±/ÓBò
ð 	
ùò 
s   Á,BNc                 ó>  — |d   }|}|d   j                  t        |«      «       d|dz  z   }d|z  dz
  }	d|z
  }
d|dz  dz	  z   }|j                  |j                  |j                  |j
                  dœ|   } ||D �cg c]  }|d	z  |
z	  ||	z  z  ‘Œ c}«       y c c}w )
Nry  rr   r   rÅ  r™  rz  râ   r{  l     þ )ÚsetValuerÌ  r7  r#  ÚwriteUInt24Arrayr  )r   r¬   rˆ   rš   r­   r²   r~  rŒ  r  r€  r‚  rƒ  r¯   Úidxs                 r0   r©   zVarIdxMapValue.writeÄ  sÏ   € Ø˜Ñ&ˆØˆØˆ~Ñ×'Ñ'¬¨G«Ô5à˜˜v™Ñ&ˆ	Ø˜)‘^ qÑ(ˆ	Ø˜)‘^ˆ
à˜# ™,¨1Ñ,Ñ-ˆ	à×%Ñ%Ø×&Ñ&Ø×&Ñ&Ø×%Ñ%ñ	
ð
 ñˆ
ñ 	ð #öàð ˜Ñ#¨
Ñ2°s¸Y±ÓGòõ	
ùòs   Á=Br,   r÷  r’   r2   r0   rw  rw  ­  s   „ ò
ô,
r2   rw  c                   ó&   — e Zd Zd„ Zdd„Zd„ Zd„ Zy)ÚVarDataValuec                 óP  — g }|d   }|d   }t        |dz  «      }|dz  }|r|j                  |j                  }	}n|j                  |j                  }	}t	        ||«      t        ||«      }}
|j                   ||
«      «       |j                   |	||
z
  «      «       ||kD  r||d …= |S )Nrq   Ú	NumShortsé €  éÿ  )Úboolrè   r  r)  rY  r  Úextend)r   r�   rˆ   rš   rS   ÚregionCountÚ	wordCountÚ	longWordsÚreadBigArrayÚreadSmallArrayÚn1Ún2s               r0   r†   zVarDataValue.readÞ  s¸   € ØˆàÐ 0Ñ1ˆØ˜kÑ*ˆ	ô ˜ VÑ+Ó,ˆ	Ø Ñ&ˆ	áØ+1×+?Ñ+?À×AVÑAV˜.‰Là+1×+@Ñ+@À&×BVÑBV˜.ˆLä�[ )Ó,¬c°+¸yÓ.IˆBˆØ�‰‘l 2Ó&Ô'Ø�‰‘n R¨"¡WÓ-Ô.Ø�ÒØ�{‘|Ð$àˆr2   Nc                 óD  — |d   }|d   }t        |dz  «      }|dz  }|j                  |j                  f|j                  |j                  fdœ|   \  }	}
t	        ||«      t        ||«      }} |	|d | «        |
||| «       ||kD  r|j                  dg||z
  z  «       y y )Nrq   rŒ  r�  rŽ  r¸  r   )r�  r  r-  rï   rY  r  ÚwriteSmallArray)r   r¬   rˆ   rš   rS   r²   r‘  r’  r“  ÚwriteBigArrayr™  r–  r—  s                r0   r©   zVarDataValue.writeõ  sÏ   € ØÐ 0Ñ1ˆØ˜kÑ*ˆ	ô ˜ VÑ+Ó,ˆ	Ø Ñ&ˆ	ð ×*Ñ*¨F×,AÑ,AÐBØ×(Ñ(¨&×*@Ñ*@ÐAñ,
ð ñ,Ñ(ˆ˜ô
 �[ )Ó,¬c°+¸yÓ.IˆBˆÙ�f˜S˜b�kÔ"Ù˜˜r +Ð.Ô/Ø�ÒØ×"Ñ" A 3¨"¨{Ñ*:Ñ#;Õ<ð r2   c                 óT   — |j                  ||d|fgz   «       |j                  «        y rÑ   rp  r¹   s         r0   r»   zVarDataValue.xmlWrite  rq  r2   c                 ó   — t        |d   «      S rÑ   rs  r´   s       r0   r·   zVarDataValue.xmlRead  rt  r2   r,   ru  r’   r2   r0   rŠ  rŠ  Ý  s   „ òó.=ò&ó(r2   rŠ  c                   ó&   — e Zd Zd„ Zdd„Zd„ Zd„ Zy)ÚTupleValuesc                 ó4   — t        j                  d |«      d   S rÞ   )r	   ÚdecompileDeltas_)r   rÈ  rˆ   s      r0   r†   zTupleValues.read  s   € Ü×.Ñ.¨t°TÓ:¸1Ñ=Ð=r2   Nc                 ój   — |j                   t           }t        t        j                  || ¬«      «      S )N)ÚoptimizeSize)Úcfgr   Úbytesr	   ÚcompileDeltaValues_)r   r¬   rˆ   rš   rS   r²   ÚoptimizeSpeeds          r0   r©   zTupleValues.write  s1   € ØŸ™Ô!4Ñ5ˆÜÜ×.Ñ.¨vÈÐDUÔVó
ð 	
r2   c                 ó   — t        |d   «      S rÑ   rs  r´   s       r0   r·   zTupleValues.xmlRead  rt  r2   c                 óT   — |j                  ||d|fgz   «       |j                  «        y rÑ   rp  r¹   s         r0   r»   zTupleValues.xmlWrite  rq  r2   r,   r±  r’   r2   r0   rž  rž    s   „ ò>ó
ò(ór2   rž  c                   ó:   — e Zd Z	 d	ddddœd„Zd„ Zd	d„Zd„ Zd„ Zy)
Ú	CFF2IndexNrh   )Ú	itemClassÚitemConverterClassrC   c                ót   — t         j                  | |||||¬«       || _        |� |«       | _        y d | _        y rº  )rg   r€   Ú
_itemClassÚ
_converter)r   r]   r^   r_   rQ   r«  r¬  rC   s           r0   r€   zCFF2Index.__init__#  sJ   € ô 	×ÑØ�$˜  Z¸[ð 	ô 	
ð $ˆŒà$6Ð$BÑÓ ð 	�ØHLð 	�r2   c                 ó€  ‡ ‡‡‡‡‡— ‰j                  «       Š‰dk(  rg S ‰j                  «       Šd„ Š ‰‰‰«      }‰j                  duxr ‰dkD  }|sÍ |‰dz   «      }g }|j                  d«      }‰j	                  |dz
  «       |D ]”  }	||	k  sJ ‚‰j	                  |	|z
  «      }
‰ j
                  �0‰ j                  «       }|j                  |
‰‰j                  «       |}
n(‰ j                  �‰ j                  j                  |
‰«      }
|j                  |
«       |	}Œ– |S ˆˆˆˆˆˆ fd„} |«       }t        |g‰z  «      }|S )Nr   c                 óf   — | j                   | j                  | j                  | j                  dœ|   S )Nr{  r|  )r�   ÚoffSizes     r0   ÚgetReadArrayz$CFF2Index.read.<locals>.getReadArray<  s:   € à×(Ñ(Ø×)Ñ)Ø×)Ñ)Ø×(Ñ(ñ	ð
 ñð r2   Fr‚   r   c                  óŒ   •‡‡‡‡— ‰	j                  «       Š‰	j                  Š‰‰dz   ‰z  z   dz
  Š ‰‰‰«      Šˆˆˆˆˆˆˆ
fd„} | S )Nr   c                 ór  •— ‰	j                  ‰| ‰z  z   «        ‰d«      }‰	j                  ‰|d   z   «       ‰	j                  |d   |d   z
  «      }‰
j                  �1‰
j                  «       }|j                  |‰‰	j                  «       |}|S ‰
j
                  �‰
j
                  j                  |‰«      }|S )Nr  r   r   )r…   rÆ  r®  rÑ  Ú
localStater¯  r†   )r‡   r£  r¥  ÚobjÚdata_posrˆ   r²  Ú
offset_posr�   rŠ   r   s       €€€€€€€r0   rŒ   z8CFF2Index.read.<locals>.get_read_item.<locals>.read_itemc  s¶   ø€ Ø×$Ñ$ Z°!°g±+Ñ%=Ô>Ù'¨›l�GØ×$Ñ$ X°¸±
Ñ%:Ô;Ø&×/Ñ/°¸±
¸WÀQ¹ZÑ0GÓH�Dà—‘Ð2Ø"Ÿo™oÓ/˜ØŸ™ d¨D°+×2HÑ2HÔIØ"˜ð  �Kð Ÿ™Ð4Ø#Ÿ™×3Ñ3°D¸$Ó?˜Ø�Kr2   r�   )rŒ   r¸  r¹  r�   rŠ   r›   rˆ   r³  r²  r�   r   s    @@@@€€€€€€r0   r�   z%CFF2Index.read.<locals>.get_read_item]  sM   ü€ Ø$Ÿk™k›m�Ø#ŸZ™Z�
Ø%¨°©°gÑ(=Ñ=ÀÑA�Ù(¨°gÓ>�	÷ ò  ð !Ð r2   )rø   r1  r•   ÚpoprÆ  r®  rÑ  r¶  r¯  r†   rW   r   )r   r�   rˆ   rš   r�   r•   r£  rí  Ú
lastOffsetr  r¥  r·  r�   rŒ   rœ   r›   r³  r²  s   ```            @@@r0   r†   zCFF2Index.read6  sL  ý€ Ø× Ñ Ó"ˆØ�AŠ:ØˆIØ×"Ñ"Ó$ˆò	ñ ! ¨Ó1ˆ	à�y‰y Ð%Ò3¨%°!©)ˆÙÙ ¨¡	Ó*ˆGØˆEØ Ÿ™ Q›ˆJØ�O‰O˜J¨™NÔ+à!ò $�Ø! VÒ+Ð+Ð+Ø—‘ v°
Ñ':Ó;�à—?‘?Ð.ØŸ/™/Ó+�CØ—M‘M $¨¨f×.?Ñ.?Ô@Ø‘DØ—_‘_Ð0ØŸ?™?×/Ñ/°°dÓ;�Dà—‘˜TÔ"Ø#‘
ð$ð ˆL÷!ñ !ñ, &›ˆIÜ˜)˜ uÑ,Ó-ˆAð ˆHr2   c                 ó°  — |}|j                  t        |«      «       t        |«      sy | j                  �|D �cg c]  }|j                  |«      ‘Œ }}nF| j                  �:t        |«      D ��cg c]$  \  }}| j                  j                  |||||«      ‘Œ& }}}|D �cg c]  }t        |«      ‘Œ }	}t        t        |	d¬«      «      }	|	d   }
|
dk  rdn|
dk  rdn|
dk  rdnd	}|j                  |«       |j                  |j                  |j                  |j                  d
œ|   } ||	«       |D ]  }|j                  |«       Œ y c c}w c c}}w c c}w )Nr   )Úinitialr&  é   i   r  i   r:  râ   r{  )rÿ   rÌ  r®  rz   r¯  r¨   r©   rG  r'   r5  r7  r#  r‡  r  rÍ  )r   r¬   rˆ   rš   rS   r²   rí  r¥  r‡   r£  r»  r²  r¯   s                r0   r©   zCFF2Index.writez  sl  € Øˆà×Ñœ#˜e›*Ô%Ü�5ŒzØà�?‰?Ð&Ø49Ö:¨D�T—\‘\ $Õ'Ð:ˆEÑ:Ø�_‰_Ð(ô  )¨Ó/÷á�A�tð —‘×%Ñ% f¨d°I¸tÀQÕGðˆEñ ð
 */Ö/ ”3�t•9Ð/ˆÐ/Ü”z '°1Ô5Ó6ˆà˜R‘[ˆ
ð ˜EÒ!ñ à  7Ò*‘°ZÀ)Ò5K±ÐQRð 	ð
 	×Ñ˜'Ô"ð ×%Ñ%Ø×&Ñ&Ø×&Ñ&Ø×%Ñ%ñ	
ð
 ñˆ
ñ 	�7ÔØò 	#ˆDØ×Ñ˜TÕ"ñ	#ùò5 ;ùóùò
 0s   ¹EÁ.)EÂEc                 óÌ   — | j                   �&| j                  «       }|j                  d |||«       |S | j                  �| j                  j                  |||«      S t	        «       ‚r,   )r®  rß  r¯  r·   r¤   )r   rµ   r¶   rˆ   r·  s        r0   r·   zCFF2Index.xmlReadŸ  s[   € Ø�?‰?Ð&Ø—/‘/Ó#ˆCØ�K‰K˜˜e W¨dÔ3ØˆJØ�_‰_Ð(Ø—?‘?×*Ñ*¨5°'¸4Ó@Ð@ä%Ó'Ð'r2   c           
      ó  — | j                   �+t        |«      D ]  \  }}|j                  ||d|fg|«       Œ y | j                  �9t        |«      D ]*  \  }}| j                  j	                  |||||d|fgz   «       Œ, y t        «       ‚)Nr2  )r®  r¨   rÖ  r¯  r»   r¤   )r   rº   rˆ   r­   r]   rµ   r‡   r¥  s           r0   r»   zCFF2Index.xmlWrite©  s“   € Ø�?‰?Ð&Ü$ UÓ+ò B‘��4Ø—
‘
˜9 d¨g°q¨\¨N¸DÕAñBà�_‰_Ð(Ü$ UÓ+ò ‘��4Ø—‘×(Ñ(Ø˜t T¨4°¸7ÀA¸,¸Ñ1Gõñô
 &Ó'Ð'r2   r,   )rU   rÄ   rÅ   r€   r†   r©   r·   r»   r’   r2   r0   rª  rª  "  s3   „ ð ð
ð ØØô
ò&BóH##òJ(ó
(r2   rª  c                   ó   — e Zd Zd„ Zy)Ú
LookupFlagc                 ó°  — |j                  ||d|fgz   «       g }|dz  r|j                  d«       |dz  r|j                  d«       |dz  r|j                  d«       |dz  r|j                  d	«       |d
z  r|j                  d«       |dz  r|j                  d|dz	  z  «       |r |j                  dj                  |«      «       |j	                  «        y )Nr­   r   ÚrightToLeftr  ÚignoreBaseGlyphsrâ   ÚignoreLigaturesr‚   ÚignoreMarksr™  ÚuseMarkFilteringSeti ÿ  zmarkAttachmentType[%i]rq  )rÒ   rW   rF  rr  rÓ   rs  s          r0   r»   zLookupFlag.xmlWrite·  sÈ   € Ø×Ñ˜D %¨G°UÐ+;Ð*<Ñ"<Ô=ØˆØ�4Š<Ø�L‰L˜Ô'Ø�4Š<Ø�L‰LÐ+Ô,Ø�4Š<Ø�L‰LÐ*Ô+Ø�4Š<Ø�L‰L˜Ô'Ø�4Š<Ø�L‰LÐ.Ô/Ø�6Š>Ø�L‰LÐ1°U¸a±ZÑ@ÔAÙØ×Ñ˜cŸh™h u›oÔ.Ø×ÑÕr2   NrG  r’   r2   r0   rÂ  rÂ  ¶  s   „ ór2   rÂ  c                   óB   ‡ — e Zd ZeZˆ fd„Zed„ «       Zed„ «       Zˆ xZ	S )Ú
_UInt8Enumc                 óD   •— | j                  t        ‰| �	  |||«      «      S r,   )Ú	enumClassr£  r†   )r   r�   rˆ   rš   r¦  s       €r0   r†   z_UInt8Enum.readÎ  s   ø€ Ø�~‰~œe™g™l¨6°4¸ÓCÓDÐDr2   c                 óJ   — t        | j                  |j                  «       «      S r,   )r…  rÌ  Úupperr�  s     r0   rÏ   z_UInt8Enum.fromStringÑ  s   € ä�s—}‘} e§k¡k£mÓ4Ð4r2   c                 óT   — | j                  |«      j                  j                  «       S r,   )rÌ  r]   Úlowerr�  s     r0   rÌ   z_UInt8Enum.toStringÕ  s    € à�}‰}˜UÓ#×(Ñ(×.Ñ.Ó0Ð0r2   )
rU   rÄ   rÅ   r—   rÌ  r†   r–  rÏ   rÌ   r«  r¬  s   @r0   rÊ  rÊ  Ë  s6   ø„ Ø€IôEð ñ5ó ð5ð ñ1ó ô1r2   rÊ  c                   ó   — e Zd ZeZy)r#   N)rU   rÄ   rÅ   Ú_ExtendModerÌ  r’   r2   r0   r#   r#   Ú  s   „ Ø�Ir2   r#   c                   ó   — e Zd ZeZy)r$   N)rU   rÄ   rÅ   Ú_CompositeModerÌ  r’   r2   r0   r$   r$   Þ  s   „ Ø�Ir2   r$   Úint8Úint16Úint32r9   r5   Úuint24r:   Úchar64rÙ  ÚOffsetÚLOffsetÚOffset24Ú	TupleList)r¬  ÚVarCompositeGlyphList)r«  c                 ó$   — t        t        | ¬«      S ©N)rQ   )r(   r:  ©ÚCs    r0   r1   r1     ó   € œ7¤9¸Ô;€ r2   c                 ó$   — t        t        | ¬«      S rà  )r(   r›  rá  s    r0   r1   r1     s   € ¬Ô1HÐUVÔ)W€ r2   c                 ó$   — t        t        | ¬«      S rà  )r(   rß  rá  s    r0   r1   r1     rã  r2   c                 ó$   — t        t        | ¬«      S rà  )r(   rT   rá  s    r0   r1   r1     s   € œ'¤%°AÔ6€ r2   c                 ó$   — t        t        | ¬«      S rà  )r(   r  rá  s    r0   r1   r1     s   € œ7¤6°aÔ8€ r2   c                 ó$   — t        t        | ¬«      S rà  )r(   r  rá  s    r0   r1   r1     s   € œW¤W¸Ô;€ r2   )rG  rW  rD   rE   rF   r"   r:  r›  rß  ÚOffsetToÚ	LOffsetToÚLOffset24To)|ÚfontTools.misc.fixedToolsr   r‹  r   r�  r   r•  r   r’  r   r³  r   rµ  Ú%fontTools.ttLib.tables.TupleVariationr	   ÚfontTools.misc.roundToolsr
   r   ÚfontTools.misc.textToolsr   r   r   r   r   ÚfontTools.misc.lazyToolsr   ÚfontTools.ttLibr   r   r8  r   r   r   r   r   ÚotTablesr   r   r   r   r   r   r    r!   r"   r#   rÒ  r$   rÔ  r%   Ú	itertoolsr&   r'   Ú	functoolsr(   Útypesr)   rÇ   rÙ  Útypingr*   ÚloggingÚ	getLoggerrU   ri  rÓ  re   Úobjectrg   rÉ   r×   rÜ   rá   rõ   r  r
  r  r  r%  r/  r9  rC  rJ   rK   rL   rN  rT  rb  re  rm  rv  r{  r‚  r˜  rœ  rŸ  r®  r°  r¼  rO   rM   rT   r  r  r=   r;   r<   r>   r4   r/  r:  r›  r³  rß  rG  rW  r`  rw  rŠ  rž  rª  rÂ  rÊ  rN   r’   r2   r0   ú<module>rú     s1  ð÷÷ õ Aß Jß MÕ MÝ -ß ?÷õ ÷÷ ÷ ó ÷ .Ý Ý !Û 	Û Ý Û ð €g×Ñ˜Ó!€Ù
(€ò=(ô@e�Fô eôP/�-ô /ô"�Kô ôˆ{ô ô&ˆ8ô &ô 'ˆHô 'ô  ˆeô  ô!ˆ}˜eô !ô'ˆHô 'ô (ˆXô (ô &ˆ8ô &ô 'ˆHô 'ô "ˆXô "ô �(ô  ô	�K ô 	ô	�[ &ô 	ô	�K ô 	ôˆ+ô ôAˆkô Aô&�ô ô
ˆVô ô �ô ô�ô ô.�ô .ô0�Zô 0ô:ˆNô ô ˆnô  ô>ˆGô >ô0�%ô ôˆkô ô0ˆ[ô ô>D4ˆ]ô D4ôN>�vô >ô6+ˆFô +ôDˆUô ôˆeô ôM�ô MôLˆuô LôG�&˜(ô GôL�Eô Lô8�(ô 8ô&�+ô ô0t�ô tô|8=˜mô 8=ôv|>˜Mô |>ôBp�ô pôf	�-ô ôD,�-ô ,ô^2(�ô 2(ôj-
�]ô -
ô`0(�=ô 0(÷fñ ô$Q(�ô Q(ôh�ô ô*1�ô 1ô�ô ô�Jô ð2à
ˆDð2ð ˆUð2ð ˆTð	2ð
 ˆUð2ð ˆfð2ð ˆfð2ð ˆeð2ð ˆfð2ð ˆwð2ð �ð2ð ˆwð2ð 
ˆ3ð2ð ˆwð2ð �ð2ð  ˆfð!2ð" �*ð#2ð$ ˆUñ%2ð& ˆwð'2ð( ˆUð)2ð* �;ð+2ð, ˆfð-2ð. ˆeð/2ð0 ˆvð12ð2 �ð32ð4 �;ð52ð6 �*ð72ð8 �nð92ð: �Lð;2ð< �*ð=2ð> �*ð?2ð@ �]ðA2ðB �ðC2ðD ‘˜°{ÔCðE2ðF ™W YÐ:KÔLñG2ðJ ØØ!Ø$Ø!Ø)á;ÙWÙ;Ù6Ù8Ù;òc2Ñ r2   