Ë
    ^ãj ® ã                   ó’	  — d Z ddl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mZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlZddlZddlZej6                  dz
  Z ej8                  e«      ZdZdZ  G d„ de!«      Z" G d„ de!«      Z#d„ Z$ G d„ de!«      Z% G d„ de%«      Z& G d„ de%«      Z' G d„ de%«      Z( G d„ de%«      Z) G d„ de)«      Z* G d „ d!e)«      Z+ G d"„ d#e!«      Z, G d$„ d%e,«      Z- G d&„ d'e-«      Z. G d(„ d)e,«      Z/ G d*„ d+e,«      Z0 G d,„ d-e!«      Z1 G d.„ d/e!«      Z2 G d0„ d1e!«      Z3d2„ Z4d3„ Z5d4„ Z6d5„ Z7d6„ Z8d7„ Z9d8„ Z:d9„ Z;d:„ Z<d;„ Z=d<„ Z>d=„ Z?d>„ Z@d?„ ZA G d@„ dAe!«      ZB G dB„ dCeB«      ZC G dD„ dEeB«      ZDdF„ ZEdG„ ZF G dH„ dIeB«      ZG G dJ„ dKeB«      ZH G dL„ dMeB«      ZI G dN„ dOeI«      ZJ G dP„ dQeI«      ZK G dR„ dSeI«      ZL G dT„ dUeB«      ZM G dV„ dWe!«      ZNdX„ ZOdY„ ZPdZ„ ZQd[„ ZRd\„ ZSd]„ ZTd^„ ZU G d_„ d`e!«      ZV G da„ dbeB«      ZWdc„ ZXdd„ ZYde„ ZZdf„ Z[dg„ Z\dh„ Z] G di„ djeI«      Z^ G dk„ dleB«      Z_ G dm„ dneB«      Z`do„ Zadp„ Zbdq„ Zc G dr„ dse!«      Zd G dt„ due!«      Ze G dv„ dweB«      Zfg dx‘dydzd{d ef«       f‘d|‘d}‘dd~dd eD«       f‘d€d�dd eD«       f‘d‚dƒdd eD«       f‘d„d…dd eD«       f‘d†d‡dd eD«       f‘dˆ‘d‰‘dŠ‘d‹‘dŒ‘d�‘dŽ‘d�d�d‘g d’¢df‘d“‘d”d•d‘g d–¢df‘d—‘d˜‘d™‘dš‘d›‘dœ‘d�‘dž‘dŸ‘d d¡d¢d eM«       f‘d£‘d¤d¥d¢d eW«       f‘d¦d§d¨d eJ«       f‘d©d/d¢d e_«       f‘dªd«d¢d e^«       f‘d¬d1d¢d eL«       f‘d­d®d¢d e`«       f‘Zgdxd�d�d‘g d’¢dfd©d/d¢d e_«       fdªd«d¢d e^«       fd¬d1d¢d eL«       fd­d®d¢d e`«       fgZhd¯Zid°Zjd±ejeid²ddfd³d´dµd¶d·d¸d¹dºd»d¼d½d¾d¿dÀdÁdÂdÃdÄdÅdÆdÇd¢d eK«       fgZkd±ejeid²ddfd³d´dµd¶d·d¸d¹dºd»d¼d½dÁdÂdÆdÇd¢d eK«       fgZldÈ„ Zm emek«        emeg«        G dÉ„ dÊejÜ                  «      Zo G dË„ dÌejÜ                  «      Zp G dÍ„ dÎe!«      ZqdÏ„ Zr G dÐ„ dÑeq«      Zs G dÒ„ dÓeq«      Zt G dÔ„ dÕeq«      Zu G dÖ„ d×e!«      Zv G dØ„ dÙev«      Zw G dÚ„ dÛev«      Zx G dÜ„ dÝev«      Zy G dÞ„ dße!«      Zzg dà¢Z{dáZ| e}e{«      e|k(  sJ ‚i Z~ ee|«      D ]
  Z€e€e~e{e€   <   Œ g dâ¢Z�dãZ‚ e}e�«      e‚k(  sJ ‚g dä¢ZƒdåZ„ e}eƒ«      e„k(  sJ ‚g dæ¢Z…dçZ† e}e…«      e†k(  sJ ‚y)èa+  cffLib: read/write Adobe CFF fonts

OpenType fonts with PostScript outlines embed a completely independent
font file in Adobe's *Compact Font Format*. So dealing with OpenType fonts
requires also dealing with CFF. This module allows you to read and write
fonts written in the CFF format.

In 2016, OpenType 1.8 introduced the `CFF2 <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2>`_
format which, along with other changes, extended the CFF format to deal with
the demands of variable fonts. This module parses both original CFF and CFF2.

é    )Ússtruct)ÚpsCharStrings)Ú	unionRectÚintRect)ÚbytechrÚbyteordÚ	bytesjoinÚtobytesÚtostrÚsafeEval)ÚTTFont)ÚOTTableWriter)ÚOTTableReader)ÚotTables)ÚBytesIONé   z%
	major:   B
	minor:   B
	hdrSize: B
i  c                   ód   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zdd„Z	d	„ Z
dd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú
CFFFontSetan  A CFF font "file" can contain more than one font, although this is
    extremely rare (and not allowed within OpenType fonts).

    This class is the entry point for parsing a CFF table. To actually
    manipulate the data inside the CFF font, you will want to access the
    ``CFFFontSet``'s :class:`TopDict` object. To do this, a ``CFFFontSet``
    object can either be treated as a dictionary (with appropriate
    ``keys()`` and ``values()`` methods) mapping font names to :class:`TopDict`
    objects, or as a list.

    .. code:: python

            from fontTools import ttLib
            tt = ttLib.TTFont("Tests/cffLib/data/LinLibertine_RBI.otf")
            tt["CFF "].cff
            # <fontTools.cffLib.CFFFontSet object at 0x101e24c90>
            tt["CFF "].cff[0] # Here's your actual font data
            # <fontTools.cffLib.TopDict object at 0x1020f1fd0>

    Nc                 óÀ  — || _         t        j                  t        |j	                  d«      | «       |�/|rdnd}| j
                  |k7  r>t        d|| j
                  fz  «      ‚| j
                  dv sJ d«       ‚| j
                  dk(  }|s�t        j                  d|j	                  d«      «      d	   | _        |j                  | j                  «       t        d
„ t        ||¬«      D «       «      | _        t        ||¬«      | _        t!        |«      | _        n�t        j                  d|j	                  d«      «      d	   | _        |j                  | j                  «       dg| _        |j&                  }t        ||| j$                  |¬«      | _        d| _        t)        ||¬«      | _        | j"                  | j                  _        | j*                  | j                  _        y)a‹  Parse a binary CFF file into an internal representation. ``file``
        should be a file handle object. ``otFont`` is the top-level
        :py:class:`fontTools.ttLib.ttFont.TTFont` object containing this CFF file.

        If ``isCFF2`` is passed and set to ``True`` or ``False``, then the
        library makes an assertion that the CFF header is of the appropriate
        version.
        é   Né   r   ú2Invalid CFF 'major' version: expected %d, found %d©r   r   úUnknown CFF formatÚBr   c              3   ó6   K  — | ]  }t        |d ¬«      –— Œ y­w)Úlatin1©ÚencodingN©r   )Ú.0Úss     ú[/var/www/html/metafoliadorv2/venv/lib/python3.12/site-packages/fontTools/cffLib/__init__.pyú	<genexpr>z'CFFFontSet.decompile.<locals>.<genexpr>b   s   è ø€ ò "Ø01”�a (×+Ð+ñ"ùs   ‚©ÚisCFF2ú>HÚCFF2Font)ÚotFontr   ÚunpackÚcffHeaderFormatÚreadÚmajorÚ
ValueErrorÚstructÚoffSizeÚseekÚhdrSizeÚlistÚIndexÚ	fontNamesÚTopDictIndexÚtopDictIndexÚIndexedStringsÚstringsÚtopDictSizeÚgetGlyphOrderÚGlobalSubrsIndexÚGlobalSubrs)ÚselfÚfiler)   r&   Úexpected_majorÚcff2GetGlyphOrders         r#   Ú	decompilezCFFFontSet.decompileF   s—  € ð ˆŒÜ�‰”¨¯	©	°!«°dÔ;ØÐñ #)™Q¨aˆNØ�z‰z˜^Ò+Ü ØHØ% t§z¡zÐ2ñ3óð ð —:‘: Ñ'Ð=Ð)=Ó=Ð'Ø—Z‘Z 1‘_ˆFÙÜ!Ÿ=™=¨¨d¯i©i¸«lÓ;¸AÑ>ˆDŒLØ�I‰I�d—l‘lÔ#Ü!ñ "Ü5:¸4ÈÔ5Oô"ó ˆDŒNô !-¨T¸&Ô AˆDÔÜ)¨$Ó/ˆD�Lä%Ÿ}™}¨T°4·9±9¸Q³<Ó@ÀÑCˆDÔØ�I‰I�d—l‘lÔ#Ø(˜\ˆDŒNØ &× 4Ñ 4Ðä ,ØÐ'¨×)9Ñ)9À&ô!ˆDÔð  ˆDŒLÜ+¨D¸Ô@ˆÔØ$(§L¡Lˆ×ÑÔ!Ø(,×(8Ñ(8ˆ×ÑÕ%ó    c                 ó,   — t        | j                  «      S ©N)Úlenr5   ©r>   s    r#   Ú__len__zCFFFontSet.__len__u   s   € Ü�4—>‘>Ó"Ð"rC   c                 ó,   — t        | j                  «      S rE   )r3   r5   rG   s    r#   ÚkeyszCFFFontSet.keysx   s   € Ü�D—N‘NÓ#Ð#rC   c                 ó   — | j                   S rE   )r7   rG   s    r#   ÚvalueszCFFFontSet.values{   s   € Ø× Ñ Ð rC   c                 óþ   — t        |d«      r|j                  «       }n:t        |t        «      r|}	 | j                  j                  |«      }nt        |«      ‚| j                  |   S # t        $ r t        |«      ‚w xY w)z{Return TopDict instance identified by name (str) or index (int
        or any object that implements `__index__`).
        Ú	__index__)
ÚhasattrrN   Ú
isinstanceÚstrr5   Úindexr.   ÚKeyErrorÚ	TypeErrorr7   )r>   ÚnameOrIndexrR   Únames       r#   Ú__getitem__zCFFFontSet.__getitem__~   s~   € ô �; Ô,Ø×)Ñ)Ó+‰EÜ˜¤SÔ)ØˆDð,ØŸ™×,Ñ,¨TÓ2‘ô ˜KÓ(Ð(Ø× Ñ  Ñ'Ð'øô	 ò ,Ü˜{Ó+Ð+ð,ús   ±A' Á'A<c                 óÜ  — || _         |�/|rdnd}| j                  |k7  r>t        d|| j                  fz  «      ‚| j                  dv sJ d«       ‚| j                  dk(  }|j                  r#|s!| j                  D ]  }|j                  «        Œ |st        «       }nd}t        |«      }| j                  j                  || |¬«      }|rud| _	        |j                  t        j                  t        | «      «       |j                  «       | _        |j                  t!        j                  d	| j                  «      «       nfd
| _	        d
| _        |j                  t        j                  t        | «      «       |j                  t!        j                  d| j"                  «      «       |sOt%        «       }	| j&                  D ]  }
|	j)                  |
«       Œ |j                  |	j                  || |¬«      «       |j                  |«       |s|j                  |j                  «       «       |j                  | j*                  j                  || |¬«      «       | j                  D ]Ó  }|rŸ|j-                  «       }t/        |j0                  «      }|t/        |«      kD  s|t/        |«      k7  rd|vrt        d«      ‚|d| |_        t5        |j2                  «      t5        |j0                  j7                  «       «      k7  sŒ™t        d«      ‚t9        |d«      r|j2                  �Œ½|j-                  «       }||_        ŒÕ |j;                  |«      }|D ]  }|j                  |«       Œ |j=                  |«       y)a˜  Write the object back into binary representation onto the given file.
        ``file`` should be a file handle object. ``otFont`` is the top-level
        :py:class:`fontTools.ttLib.ttFont.TTFont` object containing this CFF file.

        If ``isCFF2`` is passed and set to ``True`` or ``False``, then the
        library makes an assertion that the CFF header is of the appropriate
        version.
        Nr   r   r   r   r   r%   é   r'   é   r   ÚVARCz.CFF2 CharStrings count does not match the fontz/CFF2 CharStrings must form a glyph-order prefixÚcharset)r)   r-   r.   ÚrecalcBBoxesr7   ÚrecalcFontBBoxr8   Ú	CFFWriterÚgetCompilerr2   Úaddr   Úpackr+   ÚgetDataLengthr:   r/   r0   r4   r5   Úappendr=   r;   rF   ÚCharStringsr\   ÚsetrJ   rO   ÚgetChildrenÚtoFile)r>   r?   r)   r&   r@   ÚtopDictr9   ÚwriterÚtopCompilerr5   rV   Ú
glyphOrderÚcountr\   ÚchildrenÚchilds                   r#   ÚcompilezCFFFontSet.compileŽ   sö  € ð ˆŒØÐá"(™Q¨aˆNØ�z‰z˜^Ò+Ü ØHØ% t§z¡zÐ2ñ3óð ð —:‘: Ñ'Ð=Ð)=Ó=Ð'Ø—Z‘Z 1‘_ˆFà×Ò¡vØ×,Ñ,ò )�Ø×&Ñ&Õ(ð)ñ Ü$Ó&‰GàˆGÜ˜6Ó"ˆØ×'Ñ'×3Ñ3°G¸TÈ&Ð3ÓQˆÙØˆDŒLØ�J‰J”w—|‘|¤O°TÓ:Ô;à*×8Ñ8Ó:ˆDÔØ�J‰J”v—{‘{ 4¨×)9Ñ)9Ó:Õ;àˆDŒLØˆDŒLØ�J‰J”w—|‘|¤O°TÓ:Ô;Ø�J‰J”v—{‘{ 3¨¯©Ó5Ô6ÙÜ›ˆIØŸ™ò '�Ø× Ñ  Õ&ð'à�J‰J�y×,Ñ,¨W°dÀ6Ð,ÓJÔKØ�
‰
�;ÔÙØ�J‰J�w×*Ñ*Ó,Ô-Ø�
‰
�4×#Ñ#×/Ñ/°¸ÀfÐ/ÓMÔNà×(Ñ(ò 	*ˆGÙØ#×1Ñ1Ó3�
Ü˜G×/Ñ/Ó0�Øœ3˜z›?Ò*ØœS ›_Ò,°¸vÑ1Eä$Ð%UÓVÐVØ",¨V¨eÐ"4�”Ü�w—‘Ó'¬3¨w×/BÑ/B×/GÑ/GÓ/IÓ+JÓJÜ$Ð%VÓWÐWÜ˜W iÔ0°G·O±OÑ4KØ ×.Ñ.Ó0�Ø")�•ð	*ð ×*Ñ*¨7Ó3ˆØò 	ˆEØ�J‰J�uÕð	ð 	�‰�dÕrC   c                 óz  — |j                  d| j                  ¬«       |j                  «        |j                  d| j                  ¬«       |j                  «        | j                  D ]e  }|j                  dt        |«      ¬«       |j                  «        | |   }|j                  |«       |j                  d«       |j                  «        Œg |j                  «        |j                  d«       |j                  «        | j                  j                  |«       |j                  d«       |j                  «        y)z÷Write the object into XML representation onto the given
        :class:`fontTools.misc.xmlWriter.XMLWriter`.

        .. code:: python

                writer = xmlWriter.XMLWriter(sys.stdout)
                tt["CFF "].cff.toXML(writer)

        r-   ©ÚvalueÚminorÚCFFFont©rV   r=   N)
Ú	simpletagr-   Únewlinert   r5   Úbegintagr   ÚtoXMLÚendtagr=   )r>   Ú	xmlWriterÚfontNameÚfonts       r#   rz   zCFFFontSet.toXMLØ   s  € ð 	×Ñ˜G¨4¯:©:ÐÔ6Ø×ÑÔØ×Ñ˜G¨4¯:©:ÐÔ6Ø×ÑÔØŸ™ò 	 ˆHØ×Ñ˜y¬u°X«ÐÔ?Ø×ÑÔØ˜‘>ˆDØ�J‰J�yÔ!Ø×Ñ˜YÔ'Ø×ÑÕð	 ð 	×ÑÔØ×Ñ˜=Ô)Ø×ÑÔØ×Ñ×Ñ˜yÔ)Ø×Ñ˜Ô'Ø×ÑÕrC   c                 ó²  — || _         t        | d«      sd| _        t        | d«      sd| _        |dk(  �rî| j                  dk(  r¡t        | d«      sd| _        t        | d«      sd| _        t        | d	«      st        «       | _        t        | d
«      sg | _        t        «       | _
        |d   }| j                  j                  |«       t        | j                  ¬«      }d|_        n�| j                  dk(  r€t        | d«      sd| _        t        | d	«      st        «       | _        t        | d
«      sdg| _        | j                   j                  }t        | j                  |¬«      }t        d|«      | _
        | j                  j                  «       |D ],  }t        |t         «      rŒ|\  }}}|j#                  |||«       Œ. t        |d«      rV|j$                  d   j&                  €<|j$                  }	|	D ]*  }
t        |
d«      sŒ|j(                  |
j*                  _        Œ, yyy|d	k(  rt,        j.                  }t        | d	«      st        «       | _        |D ]N  }t        |t         «      rŒ|\  }}} |«       }|j#                  |||«       | j                  j                  |«       ŒP y|dk(  rt1        |d   «      | _        y|dk(  rt1        |d   «      | _        yy)z?Reads data from the XML element into the ``CFFFontSet`` object.r-   r   rt   r   ru   r0   rZ   r2   r=   r5   rV   )r=   Nr   rY   r(   )r=   rA   ÚVarStoreÚPrivaters   )r)   rO   r-   rt   r0   r2   r<   r=   r5   r6   r7   rd   ÚTopDictr\   r;   rP   rQ   ÚfromXMLÚFDArrayÚvstorer€   r�   r   ÚT2CharStringÚint)r>   rV   ÚattrsÚcontentr)   r}   ri   rA   ÚelementÚfdArrayÚfontDictÚsubrCharStringClassÚsubrs                r#   rƒ   zCFFFontSet.fromXMLõ   s¡  € àˆŒô �t˜WÔ%ØˆDŒJÜ�t˜WÔ%ØˆDŒJà�9ÓØ�z‰z˜QŠÜ˜t YÔ/à#$�D”LÜ˜t YÔ/Ø#$�D”LÜ˜t ]Ô3Ü'7Ó'9�DÔ$Ü˜t [Ô1Ø%'�D”NÜ(4«�DÔ%Ø  ™=�Ø—‘×%Ñ% hÔ/Ü!¨d×.>Ñ.>Ô?�Ø"&�•Ø—‘˜q’Ü˜t YÔ/Ø#$�D”LÜ˜t ]Ô3Ü'7Ó'9�DÔ$Ü˜t [Ô1Ø&0 \�D”NØ$(§K¡K×$=Ñ$=Ð!Ü!Ø $× 0Ñ 0ÐDUô�ô %1°Ð7HÓ$I�Ô!Ø×Ñ×$Ñ$ WÔ-Ø"ò 6�Ü˜g¤sÔ+ØØ'.Ñ$��e˜WØ—‘  e¨WÕ5ð	6ô �w 
Ô+°·±ÀÑ0B×0IÑ0IÐ0QØ!Ÿ/™/�Ø 'ò C�HÜ˜x¨Õ3Ø29×2BÑ2B˜×(Ñ(Õ/ñCð 1RÐ+ð �]Ò"Ü"/×"<Ñ"<ÐÜ˜4 Ô/Ü#3Ó#5�Ô Ø"ò .�Ü˜g¤sÔ+ØØ'.Ñ$��e˜WÙ*Ó,�Ø—‘˜T 5¨'Ô2Ø× Ñ ×'Ñ'¨Õ-ñ.ð �WŠ_Ü˜U 7™^Ó,ˆD�JØ�WŠ_Ü˜U 7™^Ó,ˆD�Jð rC   c                 ó"   — ddl m}  || |«       y )Nr   )Ú_convertCFFToCFF2)Ú	CFFToCFF2r�   )r>   r)   r�   s      r#   ÚconvertCFFToCFF2zCFFFontSet.convertCFFToCFF29  ó   € Ý0á˜$ Õ'rC   c                 ó"   — ddl m}  || |«       y )Nr   )Ú_convertCFF2ToCFF)Ú	CFF2ToCFFr•   )r>   r)   r•   s      r#   ÚconvertCFF2ToCFFzCFFFontSet.convertCFF2ToCFF>  r“   rC   c                 ó    — ddl m}  || «       y )Nr   )Údesubroutinize)Ú
transformsr™   )r>   r™   s     r#   r™   zCFFFontSet.desubroutinizeC  s   € Ý.á�tÕrC   c                 ó    — ddl m}  || «       y )Nr   )Úremove_hints)rš   rœ   )r>   rœ   s     r#   rœ   zCFFFontSet.remove_hintsH  s   € Ý,á�TÕrC   c                 ó    — ddl m}  || «       y )Nr   )Úremove_unused_subroutines)rš   rž   )r>   rž   s     r#   rž   z$CFFFontSet.remove_unused_subroutinesM  s   € Ý9á! $Õ'rC   rE   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   rH   rJ   rL   rW   rp   rz   rƒ   r’   r—   r™   rœ   rž   © rC   r#   r   r   0   sM   „ ñó*-9ò^#ò$ò!ò(ó HòTó:B-òH(ò
(ò
ò
ó
(rC   r   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)r_   zXHelper class for serializing CFF data to binary. Used by
    :meth:`CFFFontSet.compile`.c                 ó    — g | _         || _        y rE   )Údatar&   ©r>   r&   s     r#   Ú__init__zCFFWriter.__init__W  s   € ØˆŒ	Øˆ�rC   c                 ó:   — | j                   j                  |«       y rE   )r¦   rd   )r>   Útables     r#   ra   zCFFWriter.add[  s   € Ø�	‰	×Ñ˜ÕrC   c                 óÌ  — d }d}	 t         j                  t        d|«       |dz   }d}|g}| j                  D ]’  }t        |d«      rE||j	                  «       z   }t        |t        «      r0|j                  r$|j	                  «       | _        n|t        |«      z   }t        |d«      r|j                  ||«       |}|j                  |«       Œ” ||k(  rn|}ŒÏt         j                  t        d«       |j                  «       }| j                  r.t        j                  d| j                  «      | j                  d<   n@t        |d   «      | _        t        j                  d	| j                   «      | j                  d<   dg}| j                  D ]S  }t        |d
«      r|j#                  |«       n|j%                  |«       |j                  |j                  «       |z
  «       ŒU ||k(  sJ ‚y )Nr   z CFFWriter.toFile() iteration: %dr   rc   ÚsetPosz#CFFWriter.toFile() writing to file.r'   éÿÿÿÿr   rh   )ÚlogÚDEBUGr¦   rO   rc   rP   ÚTopDictIndexCompilerr&   r:   rF   r¬   rd   Útellr/   rb   ÚcalcOffSizer0   rh   Úwrite)	r>   r?   ÚlastPosListrm   ÚposÚposListÚitemÚendPosÚbegins	            r#   rh   zCFFWriter.toFile^  s¤  € ØˆØˆØÜ�G‰G”EÐ=¸uÔEØ˜A‘IˆEØˆCØ�eˆGØŸ	™	ò 
$�Ü˜4 Ô1Ø  4×#5Ñ#5Ó#7Ñ7�FÜ! $Ô(<Ô=À$Ç+Â+Ø+/×+=Ñ+=Ó+?˜Õ(à ¤3 t£9™_�FÜ˜4 Ô*Ø—K‘K  VÔ,Ø�Ø—‘˜sÕ#ð
$ð ˜+Ò%ØØ!ˆKð% ô& 	�‰”Ð<Ô=Ø—	‘	“ˆØ�;Š;Ü!Ÿ;™; t¨T×-=Ñ-=Ó>ˆD�I‰I�aŠLä& {°2¡Ó7ˆDŒLÜ!Ÿ;™; s¨D¯L©LÓ9ˆD�I‰I�a‰LØ�#ˆØ—I‘Iò 	0ˆDÜ�t˜XÔ&Ø—‘˜DÕ!à—
‘
˜4Ô Ø�N‰N˜4Ÿ9™9›;¨Ñ.Õ/ð	0ð ˜+Ò%Ð%Ñ%rC   N)rŸ   r    r¡   r¢   r¨   ra   rh   r£   rC   r#   r_   r_   S  s   „ ñ#òò ó$&rC   r_   c                 ó@   — | dk  rd}|S | dk  rd}|S | dk  rd}|S d}|S )Né   r   i   r   i   r   rZ   r£   )ÚlargestOffsetr0   s     r#   r²   r²   …  sN   € Ø�uÒØˆð €Nð 
˜Ò	 Øˆð
 €Nð	 
˜Ò	"Øˆð €Nð ˆØ€NrC   c                   ó0   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zy)	ÚIndexCompilerz…Base class for writing CFF `INDEX data <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#5-index-data>`_
    to binary.Nc                 óŠ   — |€t        |d«      r|j                  }|€J ‚|| _        | j                  ||«      | _        || _        y ©Nr&   )rO   r&   ÚgetItemsÚitemsÚparent)r>   rÂ   r9   rÃ   r&   s        r#   r¨   zIndexCompiler.__init__•  sE   € Øˆ>œg f¨hÔ7Ø—]‘]ˆFØÐ%Ð%Ð%ØˆŒØ—]‘] 5¨'Ó2ˆŒ
Øˆ�rC   c                 ó   — |S rE   r£   ©r>   rÂ   r9   s      r#   rÁ   zIndexCompiler.getItems�  ó   € ØˆrC   c                 óÐ   — | j                   rWd}|g}| j                   D ]A  }t        |d«      r||j                  «       z   }n|t        |«      z   }|j	                  |«       ŒC |S g }|S )Nr   rc   )rÂ   rO   rc   rF   rd   )r>   rµ   Úoffsetsr·   s       r#   Ú
getOffsetszIndexCompiler.getOffsets   sq   € à�:Š:ØˆCØ�eˆGØŸ
™
ò $�Ü˜4 Ô1Ø × 2Ñ 2Ó 4Ñ4‘Cà¤ D£	™/�CØ—‘˜sÕ#ð$ð ˆð ˆGØˆrC   c                 óÒ   — | j                   rd}nd}| j                  rG| j                  «       d   }t        |«      }|dz   t	        | j                  «      dz   |z  z   |z   dz
  }|S |}|S )NrZ   r   r­   r   )r&   rÂ   rÉ   r²   rF   )r>   Ú	countSizeÚ
lastOffsetr0   Ú
dataLengths        r#   rc   zIndexCompiler.getDataLength¯  sˆ   € Ø�;Š;Ø‰IàˆIà�:Š:ØŸ™Ó*¨2Ñ.ˆJÜ! *Ó-ˆGàØñä�t—z‘z“? QÑ&¨'Ñ1ñ2ð ñð ñ	ð ð Ðð #ˆJàÐrC   c                 ó2  — | j                  «       }| j                  r t        |t        | j                  «      «       nt        |t        | j                  «      «       | j                  r°t        |d   «      }t        ||«       | }t        j                  }|D ]0  } |d|«      |d  }t        |«      | k(  sJ ‚|j                  |«       Œ2 | j                  D ]>  }t        |d«      r|j                  |«       Œ!t        |d¬«      }|j                  |«       Œ@ y y )Nr­   ú>lrh   r   r   )rÉ   r&   ÚwriteCard32rF   rÂ   ÚwriteCard16r²   Ú
writeCard8r/   rb   r³   rO   rh   r
   )	r>   r?   rÈ   r0   rb   ÚoffsetÚ	binOffsetr·   r¦   s	            r#   rh   zIndexCompiler.toFileÅ  sò   € Ø—/‘/Ó#ˆØ�;Š;Ü˜œc $§*¡*›oÕ.ä˜œc $§*¡*›oÔ.à�:Š:Ü! '¨"¡+Ó.ˆGÜ�t˜WÔ%Ø�hˆGÜ—;‘;ˆDØ!ò &�Ù   vÓ.¨w¨xÐ8�	Ü˜9“~¨'¨Ò1Ð1Ð1Ø—
‘
˜9Õ%ð&ð Ÿ
™
ò %�Ü˜4 Ô*Ø—K‘K Õ%ä" 4°(Ô;�DØ—J‘J˜tÕ$ñ%ð rC   rE   )	rŸ   r    r¡   r¢   r¨   rÁ   rÉ   rc   rh   r£   rC   r#   r¾   r¾   ‘  s    „ ñóòòòó,%rC   r¾   c                   ó   — e Zd Zd„ Zy)ÚIndexedStringsCompilerc                 ó   — |j                   S rE   ©r9   rÅ   s      r#   rÁ   zIndexedStringsCompiler.getItemsÞ  s   € Ø�}‰}ÐrC   N)rŸ   r    r¡   rÁ   r£   rC   r#   rÖ   rÖ   Ý  s   „ órC   rÖ   c                   óB   ‡ — e Zd ZdZd„ Zd„ Zˆ fd„Zˆ fd„Zˆ fd„Zˆ xZ	S )r°   z/Helper class for writing the TopDict to binary.c                 óZ   — g }|D ]#  }|j                  |j                  || «      «       Œ% |S rE   ©rd   r`   ©r>   rÂ   r9   Úoutr·   s        r#   rÁ   zTopDictIndexCompiler.getItemså  ó4   € ØˆØò 	8ˆDØ�J‰J�t×'Ñ'¨°Ó6Õ7ð	8àˆ
rC   c                 ól   — g }| j                   D ]"  }|j                  |j                  |«      «       Œ$ |S rE   ©rÂ   Úextendrg   )r>   r9   rn   ri   s       r#   rg   z TopDictIndexCompiler.getChildrenë  s6   € ØˆØ—z‘zò 	:ˆGØ�O‰O˜G×/Ñ/°Ó8Õ9ð	:àˆrC   c                 ó‚   •— | j                   r!d| j                  d   j                  «       g}|S t        t        | �  «       S ©Nr   )r&   rÂ   rc   Úsuperr°   rÉ   )r>   rÈ   Ú	__class__s     €r#   rÉ   zTopDictIndexCompiler.getOffsetsñ  s;   ø€ Ø�;Š;Ø˜$Ÿ*™* Q™-×5Ñ5Ó7Ð8ˆGØˆNäÔ-¨tÑ?ÓAÐArC   c                 ó~   •— | j                   r| j                  d   j                  «       }|S t        t        | �  «       S rã   )r&   rÂ   rc   rä   r°   )r>   rÍ   rå   s     €r#   rc   z"TopDictIndexCompiler.getDataLengthø  s7   ø€ Ø�;Š;ØŸ™ A™×4Ñ4Ó6ˆJØÐäÔ-¨tÑBÓDÐDrC   c                 ó‚   •— | j                   r| j                  d   j                  |«       y t        t        | �  |«       y rã   )r&   rÂ   rh   rä   r°   )r>   r?   rå   s     €r#   rh   zTopDictIndexCompiler.toFileÿ  s0   ø€ Ø�;Š;Ø�J‰J�q‰M× Ñ  Õ&äÔ&¨Ñ4°TÕ:rC   )
rŸ   r    r¡   r¢   rÁ   rg   rÉ   rc   rh   Ú__classcell__©rå   s   @r#   r°   r°   â  s&   ø„ Ù9òòôBôE÷;ð ;rC   r°   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚFDArrayIndexCompilerz®Helper class for writing the
    `Font DICT INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#10-font-dict-index-font-dicts-and-fdselect>`_
    to binary.c                 óZ   — g }|D ]#  }|j                  |j                  || «      «       Œ% |S rE   rÛ   rÜ   s        r#   rÁ   zFDArrayIndexCompiler.getItems  rÞ   rC   c                 ól   — g }| j                   D ]"  }|j                  |j                  |«      «       Œ$ |S rE   rà   )r>   r9   rn   rŒ   s       r#   rg   z FDArrayIndexCompiler.getChildren  s6   € ØˆØŸ
™
ò 	;ˆHØ�O‰O˜H×0Ñ0°Ó9Õ:ð	;àˆrC   c                 óþ  — | j                  «       }| j                  r t        |t        | j                  «      «       nt        |t        | j                  «      «       t        |d   «      }t        ||«       | }t        j                  }|D ]0  } |d|«      |d  }t        |«      | k(  sJ ‚|j                  |«       Œ2 | j                  D ]1  }t        |d«      r|j                  |«       Œ!|j                  |«       Œ3 y )Nr­   rÏ   rh   )rÉ   r&   rÐ   rF   rÂ   rÑ   r²   rÒ   r/   rb   r³   rO   rh   )r>   r?   rÈ   r0   rb   rÓ   rÔ   r·   s           r#   rh   zFDArrayIndexCompiler.toFile  sÚ   € Ø—/‘/Ó#ˆØ�;Š;Ü˜œc $§*¡*›oÕ.ä˜œc $§*¡*›oÔ.Ü˜g b™kÓ*ˆÜ�4˜Ô!Ø�(ˆÜ�{‰{ˆØò 	"ˆFÙ˜T 6Ó*¨7¨8Ð4ˆIÜ�y“> g XÒ-Ð-Ð-Ø�J‰J�yÕ!ð	"ð —J‘Jò 	!ˆDÜ�t˜XÔ&Ø—‘˜DÕ!à—
‘
˜4Õ ñ		!rC   c                 ó6   — || j                   j                  d<   y )Nr„   ©rÃ   ÚrawDict©r>   rµ   r¸   s      r#   r¬   zFDArrayIndexCompiler.setPos+  ó   € Ø),ˆ�‰×Ñ˜IÒ&rC   N)rŸ   r    r¡   r¢   rÁ   rg   rh   r¬   r£   rC   r#   rë   rë     s   „ ñòòò!ó(-rC   rë   c                   ó   — e Zd ZdZd„ Zy)ÚGlobalSubrsCompilerz§Helper class for writing the `global subroutine INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#9-local-and-global-subr-indexes>`_
    to binary.c                 ó„   — g }|D ]8  }|j                  | j                  «       |j                  |j                  «       Œ: |S rE   ©rp   r&   rd   Úbytecode©r>   rÂ   r9   rÝ   Úcss        r#   rÁ   zGlobalSubrsCompiler.getItems3  ó=   € ØˆØò 	$ˆBØ�J‰J�t—{‘{Ô#Ø�J‰J�r—{‘{Õ#ð	$ð ˆ
rC   N)rŸ   r    r¡   r¢   rÁ   r£   rC   r#   rõ   rõ   /  s   „ ñórC   rõ   c                   ó   — e Zd ZdZd„ Zy)ÚSubrsCompilerz¦Helper class for writing the `local subroutine INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#9-local-and-global-subr-indexes>`_
    to binary.c                 óh   — || j                   j                  z
  }|| j                   j                  d<   y ©NÚSubrs)rÃ   rµ   rñ   )r>   rµ   r¸   rÓ   s       r#   r¬   zSubrsCompiler.setPos?  s(   € Ø�t—{‘{—‘Ñ&ˆØ'-ˆ�‰×Ñ˜GÒ$rC   N)rŸ   r    r¡   r¢   r¬   r£   rC   r#   rý   rý   ;  s   „ ñó.rC   rý   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚCharStringsCompilerz¡Helper class for writing the `CharStrings INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#9-local-and-global-subr-indexes>`_
    to binary.c                 ó„   — g }|D ]8  }|j                  | j                  «       |j                  |j                  «       Œ: |S rE   r÷   rù   s        r#   rÁ   zCharStringsCompiler.getItemsH  rû   rC   c                 ó6   — || j                   j                  d<   y )Nre   rð   rò   s      r#   r¬   zCharStringsCompiler.setPosO  s   € Ø-0ˆ�‰×Ñ˜MÒ*rC   N)rŸ   r    r¡   r¢   rÁ   r¬   r£   rC   r#   r  r  D  s   „ ñòó1rC   r  c                   óH   — e Zd ZdZeZdd„Zd„ Zd„ Zd„ Z	d„ Z
d„ Zdd	„Zd
„ Zy)r4   z§This class represents what the CFF spec calls an INDEX (an array of
    variable-sized objects). `Index` items can be addressed and set using
    Python list indexing.Nc                 ó  — g | _         g x| _        }| j                  j                  }|€y || _        t
        j                  t        d||j                  «       «       || _        |rt        |«      }nt        |«      }|dk(  ry d g|z  | _         t        |«      }t
        j                  t        d||«       |dk  s
J d|z  «       ‚dd|z
  z  }t        |dz   «      D ]J  }|j                  |«      }	||	z   }	t        j                  d|	«      \  }
|j!                  t#        |
«      «       ŒL |j                  «       dz
  | _        |j'                  | j$                  |d	   z   «       t
        j                  t        d
||j                  «       «       y )Núloading %s at %sr   z    index count: %s offSize: %srZ   zoffSize too large: %só    r   ú>Lr­   ú    end of %s at %s)rÂ   rÈ   rå   rŸ   Ú_isCFF2r®   r¯   r±   r?   Ú
readCard32Ú
readCard16Ú	readCard8Úranger,   r/   r*   rd   r‡   Ú
offsetBaser1   )r>   r?   r&   rÈ   rV   rm   r0   ÚpadrR   ÚchunkrÓ   s              r#   r¨   zIndex.__init__Z  sX  € ØˆŒ
Ø!#Ð#ˆŒ�wØ�~‰~×&Ñ&ˆØˆ<ØØˆŒÜ�‰”Ð)¨4°·±³Ô=ØˆŒ	ÙÜ˜tÓ$‰Eä˜tÓ$ˆEØ�AŠ:ØØ�V˜e‘^ˆŒ
Ü˜D“/ˆÜ�‰”Ð8¸%ÀÔIØ˜!Š|Ð>Ð4°wÑ>Ó>ˆ|Ø�q˜7‘{Ñ#ˆÜ˜5 1™9Ó%ò 	(ˆEØ—I‘I˜gÓ&ˆEØ˜%‘KˆEÜŸ™ d¨EÓ2‰IˆVØ�N‰Nœ3˜v›;Õ'ð		(ð
 Ÿ)™)›+¨™/ˆŒØ�	‰	�$—/‘/ G¨B¡KÑ/Ô0Ü�‰”Ð,¨d°D·I±I³KÕ@rC   c                 ó,   — t        | j                  «      S rE   )rF   rÂ   rG   s    r#   rH   zIndex.__len__w  s   € Ü�4—:‘:‹ÐrC   c                 ój  — | j                   |   }|�|S | j                  |   | j                  z   }| j                  |dz      | j                  |   z
  }| j                  }|j	                  |«       |j                  |«      }t        |«      |k(  sJ ‚| j                  ||||«      }|| j                   |<   |S ©Nr   )rÂ   rÈ   r  r?   r1   r,   rF   ÚproduceItem)r>   rR   r·   rÓ   Úsizer?   r¦   s          r#   rW   zIndex.__getitem__z  s¯   € Ø�z‰z˜%Ñ ˆØÐØˆKØ—‘˜eÑ$ t§¡Ñ6ˆØ�|‰|˜E A™IÑ&¨¯©°eÑ)<Ñ<ˆØ�y‰yˆØ�	‰	�&ÔØ�y‰y˜‹ˆÜ�4‹y˜DÒ Ð Ð Ø×Ñ  t¨T°6Ó:ˆØ ˆ�
‰
�5ÑØˆrC   c                 ó"   — || j                   |<   y rE   ©rÂ   )r>   rR   r·   s      r#   Ú__setitem__zIndex.__setitem__ˆ  s   € Ø ˆ�
‰
�5ÒrC   c                 ó   — |S rE   r£   )r>   rR   r¦   r?   rÓ   s        r#   r  zIndex.produceItem‹  s   € ØˆrC   c                 ó:   — | j                   j                  |«       y)zAdd an item to an INDEX.N)rÂ   rd   )r>   r·   s     r#   rd   zIndex.appendŽ  s   € à�
‰
×Ñ˜$ÕrC   c                 ó,   — | j                  | |||¬«      S ©Nr%   ©ÚcompilerClass©r>   r9   rÃ   r&   s       r#   r`   zIndex.getCompiler’  ó   € Ø×!Ñ! $¨°ÀÐ!ÓGÐGrC   c                 ó"   — | j                   dd…= y)zEmpty the INDEX.Nr  rG   s    r#   ÚclearzIndex.clear•  s   € à�J‰J’q‰MrC   ©NNrE   )rŸ   r    r¡   r¢   r¾   r   r¨   rH   rW   r  r  rd   r`   r$  r£   rC   r#   r4   r4   S  s8   „ ñð "€MóAò:òò!òò óHórC   r4   c                   ó|   ‡ — e Zd ZdZeZej                  Zej                  Z		 	 	 	 	 	 dˆ fd„	Z
d„ Zd„ Zd„ Zd„ Zˆ xZS )r<   ay  This index contains all the global subroutines in the font. A global
    subroutine is a set of ``CharString`` data which is accessible to any
    glyph in the font, and are used to store repeated instructions - for
    example, components may be encoded as global subroutines, but so could
    hinting instructions.

    Remember that when interpreting a ``callgsubr`` instruction (or indeed
    a ``callsubr`` instruction) that you will need to add the "subroutine
    number bias" to number given:

    .. code:: python

            tt = ttLib.TTFont("Almendra-Bold.otf")
            u = tt["CFF "].cff[0].CharStrings["udieresis"]
            u.decompile()

            u.toXML(XMLWriter(sys.stdout))
            # <some stuff>
            # -64 callgsubr <-- Subroutine which implements the dieresis mark
            # <other stuff>

            tt["CFF "].cff[0].GlobalSubrs[-64] # <-- WRONG
            # <T2CharString (bytecode) at 103451d10>

            tt["CFF "].cff[0].GlobalSubrs[-64 + 107] # <-- RIGHT
            # <T2CharString (source) at 103451390>

    ("The bias applied depends on the number of subrs (gsubrs). If the number of
    subrs (gsubrs) is less than 1240, the bias is 107. Otherwise if it is less
    than 33900, it is 1131; otherwise it is 32768.",
    `Subroutine Operators <https://docs.microsoft.com/en-us/typography/opentype/otspec180/cff2charstr#section4.4>`)
    c                 ór   •— t         t        | �  ||¬«       || _        || _        |r|| _        |r|| _        y y r  )rä   r<   r¨   ÚglobalSubrsÚprivateÚfdSelectr‹   )r>   r?   r(  r)  r*  r‹   r&   rå   s          €r#   r¨   zGlobalSubrsIndex.__init__À  sB   ø€ ô 	Ô Ñ.¨t¸FÐ.ÔCØ&ˆÔØˆŒÙØ$ˆDŒMÙØ"ˆD�Lð rC   c                 ó,  — | j                   �| j                   }n^t        | d«      rP| j                  �Dt        | d«      r| j                  �| j                  |   }nd}| j                  |   j                  }nd }| j                  ||| j                  ¬«      S )Nr‹   r*  r   ©r)  r(  )r)  rO   r‹   r*  r�   Ú	subrClassr(  )r>   rR   r¦   r?   rÓ   r)  ÚfdIndexs          r#   r  zGlobalSubrsIndex.produceItemÑ  s‚   € Ø�<‰<Ð#Ø—l‘l‰GÜ�T˜9Ô%¨$¯,©,Ð*BÜ�t˜ZÔ(¨T¯]©]Ð-FØŸ-™-¨Ñ.‘à�Ø—l‘l 7Ñ+×3Ñ3‰GàˆGØ�~‰~˜d¨GÀ×AQÑAQˆ~ÓRÐRrC   c                 óv  — |j                  d«       |j                  «        t        t        | «      «      D ]�  }| |   }|j	                  «       r|j                  d|d¬«       n|j                  d|¬«       |j                  «        |j                  |«       |j                  d«       |j                  «        Œƒ y)a  Write the subroutines index into XML representation onto the given
        :class:`fontTools.misc.xmlWriter.XMLWriter`.

        .. code:: python

                writer = xmlWriter.XMLWriter(sys.stdout)
                tt["CFF "].cff[0].GlobalSubrs.toXML(writer)

        zDThe 'index' attribute is only for humans; it is ignored when parsed.Ú
CharStringr   )rR   Úraw©rR   N)Úcommentrx   r  rF   ÚneedsDecompilationry   rz   r{   )r>   r|   ÚirŽ   s       r#   rz   zGlobalSubrsIndex.toXMLÞ  sª   € ð 	×ÑØUô	
ð 	×ÑÔÜ”s˜4“yÓ!ò 		 ˆAØ˜‘7ˆDØ×&Ñ&Ô(Ø×"Ñ" <°q¸aÐ"Õ@à×"Ñ" <°qÐ"Ô9Ø×ÑÔØ�J‰J�yÔ!Ø×Ñ˜\Ô*Ø×ÑÕñ		 rC   c                 óx   — |dk7  ry | j                  «       }|j                  |||«       | j                  |«       y )Nr0  )r-  rƒ   rd   )r>   rV   rˆ   r‰   rŽ   s        r#   rƒ   zGlobalSubrsIndex.fromXML÷  s5   € Ø�<ÒØØ�~‰~ÓˆØ�‰�T˜5 'Ô*Ø�‰�DÕrC   c                 óJ   — d }t        | d«      r| j                  |   }| |   |fS )Nr*  )rO   r*  )r>   rR   Úsels      r#   ÚgetItemAndSelectorz#GlobalSubrsIndex.getItemAndSelectorþ  s.   € ØˆÜ�4˜Ô$Ø—-‘- Ñ&ˆCØ�E‰{˜CÐÐrC   ©NNNNNN)rŸ   r    r¡   r¢   rõ   r   r   r†   r-  ÚcharStringClassr¨   r  rz   rƒ   r9  rè   ré   s   @r#   r<   r<   š  sT   ø„ ñðB (€MØ×*Ñ*€IØ#×0Ñ0€Oð ØØØØØõ#ò"Sò ò2ö rC   r<   c                   ó   — e Zd ZdZeZy)Ú
SubrsIndexz¹This index contains a glyph's local subroutines. A local subroutine is a
    private set of ``CharString`` data which is accessible only to the glyph to
    which the index is attached.N)rŸ   r    r¡   r¢   rý   r   r£   rC   r#   r=  r=    s   „ ñ$ð "�MrC   r=  c                   ó4   ‡ — e Zd ZdZeZdˆ fd„	Zd„ Zd„ Zˆ xZ	S )r6   a‡  This index represents the array of ``TopDict`` structures in the font
    (again, usually only one entry is present). Hence the following calls are
    equivalent:

    .. code:: python

            tt["CFF "].cff[0]
            # <fontTools.cffLib.TopDict object at 0x102ed6e50>
            tt["CFF "].cff.topDictIndex[0]
            # <fontTools.cffLib.TopDict object at 0x102ed6e50>

    c                 óØ  •— || _         |�Ë|rÉ|| _        g | _        | j                  j                  }t
        j                  t        d||j                  «       «       || _        d}d g|z  | _        d|g| _	        |j                  «       | _
        |j                  | j                  |z   «       t
        j                  t        d||j                  «       «       y t        t        | �;  ||¬«       y )Nr  r   r   r
  r%   )rA   r  rÂ   rå   rŸ   r®   r¯   r±   r?   rÈ   r  r1   rä   r6   r¨   )r>   r?   rA   ÚtopSizer&   rV   rm   rå   s          €r#   r¨   zTopDictIndex.__init__  s¼   ø€ Ø!2ˆÔØÐ¡Ø!ˆDŒLØˆDŒJØ—>‘>×*Ñ*ˆDÜ�G‰G”EÐ-¨t°T·Y±Y³[ÔAØˆDŒIØˆEØ˜ %™ˆDŒJØ˜w˜<ˆDŒLØ"Ÿi™i›kˆDŒOà�I‰I�d—o‘o¨Ñ/Ô0Ü�G‰G”EÐ0°$¸¿	¹	»ÕDä”, Ñ.¨t¸FÐ.ÕCrC   c                 óš   — t        | j                  ||| j                  | j                  | j                  ¬«      }|j                  |«       |S r  )r‚   r9   r=   rA   r  rB   )r>   rR   r¦   r?   rÓ   Útops         r#   r  zTopDictIndex.produceItem/  sE   € ÜØ�L‰LØØØ×ÑØ×"Ñ"Ø—<‘<ô
ˆð 	�‰�dÔØˆ
rC   c                 óæ   — t        t        | «      «      D ]Z  }|j                  d|¬«       |j                  «        | |   j	                  |«       |j                  d«       |j                  «        Œ\ y ©NÚFontDictr2  ©r  rF   ry   rx   rz   r{   ©r>   r|   r5  s      r#   rz   zTopDictIndex.toXML;  óc   € Ü”s˜4“yÓ!ò 	 ˆAØ×Ñ˜z°ÐÔ3Ø×ÑÔØ�‰G�M‰M˜)Ô$Ø×Ñ˜ZÔ(Ø×ÑÕñ	 rC   )NNr   N)
rŸ   r    r¡   r¢   r°   r   r¨   r  rz   rè   ré   s   @r#   r6   r6     s   ø„ ñð )€MõDò$
ö rC   r6   c                   ó"   — e Zd ZeZd„ Zd„ Zd„ Zy)ÚFDArrayIndexc                 óæ   — t        t        | «      «      D ]Z  }|j                  d|¬«       |j                  «        | |   j	                  |«       |j                  d«       |j                  «        Œ\ y rD  rF  rG  s      r#   rz   zFDArrayIndex.toXMLG  rH  rC   c                 óš   — t        | j                  ||| j                  | j                  | j                  ¬«      }|j                  |«       |S ©N)r&   r…   )rE  r9   r=   r  r…   rB   )r>   rR   r¦   r?   rÓ   rŒ   s         r#   r  zFDArrayIndex.produceItemO  sE   € ÜØ�L‰LØØØ×ÑØ—<‘<Ø—;‘;ô
ˆð 	×Ñ˜4Ô ØˆrC   c                 ó¨   — |dk7  ry t        «       }|D ],  }t        |t        «      rŒ|\  }}}|j                  |||«       Œ. | j	                  |«       y )NrE  )rE  rP   rQ   rƒ   rd   )r>   rV   rˆ   r‰   rŒ   rŠ   s         r#   rƒ   zFDArrayIndex.fromXML[  s\   € Ø�:ÒØÜ“:ˆØò 	3ˆGÜ˜'¤3Ô'ØØ#*Ñ ˆD�%˜Ø×Ñ˜T 5¨'Õ2ð		3ð
 	�‰�HÕrC   N)rŸ   r    r¡   rë   r   rz   r  rƒ   r£   rC   r#   rJ  rJ  D  s   „ Ø(€Mò ò
ó	rC   rJ  c                   ó8   — e Zd Zd	d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)
ÚVarStoreDataNc                 óL   — || _         d | _        || _        t        «       | _        y rE   )r?   r¦   Ú
otVarStorer   r~   )r>   r?   rR  s      r#   r¨   zVarStoreData.__init__h  s    € ØˆŒ	ØˆŒ	Ø$ˆŒÜ“Hˆ�	rC   c                 óŽ  — | j                   r¸t        | j                   «      }|dk(  r | j                   j                  «       | _        n | j                   j                  |«      | _        i }t	        | j                  |«      }t        j                  «       | _        | j                  j                  || j                  «       d | _        | S ©Néÿÿ  )
r?   r  r,   r¦   r   Úotr€   rR  rB   r~   )r>   ÚlengthÚglobalStateÚreaders       r#   rB   zVarStoreData.decompilen  sŠ   € Ø�9Š9ä §	¡	Ó*ˆFà˜ŠØ ŸI™IŸN™NÓ,�•	à ŸI™IŸN™N¨6Ó2�”	ØˆKÜ" 4§9¡9¨kÓ:ˆFÜ Ÿk™k›mˆDŒOØ�O‰O×%Ñ% f¨d¯i©iÔ8ØˆDŒIØˆrC   c                 óŽ   — t        «       }| j                  j                  || j                  «       |j	                  «       | _        y rE   )r   rR  rp   r~   Ú
getAllDatar¦   )r>   rj   s     r#   rp   zVarStoreData.compile~  s3   € Ü“ˆØ�‰×Ñ ¨¯	©	Ô2ð ×%Ñ%Ó'ˆ�	rC   c                 óP   — | j                   j                  || j                  «       y rE   )rR  rz   r~   )r>   r|   rV   s      r#   ÚwriteXMLzVarStoreData.writeXML…  s   € Ø�‰×Ñ˜i¨¯©Õ3rC   c                 óÂ   — t        j                  «       | _        |D ]A  }t        |t        «      r/|\  }}}| j                  j                  |||| j                  «       ŒBŒC y rE   )rV  r€   rR  rP   Útuplerƒ   r~   )r>   rV   rˆ   r‰   rÃ   rŠ   s         r#   ÚxmlReadzVarStoreData.xmlReadˆ  sX   € ÜŸ+™+›-ˆŒØò 	ˆGÜ˜'¤5Ô)Ø'.Ñ$��e˜WØ—‘×'Ñ'¨¨e°W¸d¿i¹iÕHàð	ð rC   c                 ó,   — t        | j                  «      S rE   ©rF   r¦   rG   s    r#   rH   zVarStoreData.__len__’  ó   € Ü�4—9‘9‹~ÐrC   c                 óX   — |€d}| j                   j                  |   }|j                  }|S rã   )rR  ÚVarDataÚVarRegionCount)r>   ÚvsIndexÚvarDataÚ
numRegionss       r#   ÚgetNumRegionszVarStoreData.getNumRegions•  s1   € Øˆ?ØˆGØ—/‘/×)Ñ)¨'Ñ2ˆØ×+Ñ+ˆ
ØÐrC   r%  )
rŸ   r    r¡   r¨   rB   rp   r]  r`  rH   rj  r£   rC   r#   rP  rP  g  s%   „ óòò (ò4òòórC   rP  c                   ó,   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zy)ÚFDSelectNc                 óâ  — |�r^t        |«      | _        | j                  dk(  r2ddlm}  |d|j                  |«      «      j	                  «       | _        y | j                  dv rõ| j                  dk(  rt        nt        }| j                  dk(  rt         nt        } ||«      }g }	d }
d}|€|n|}t        |«      D ]K  } ||«      }|dk(  r|dk7  s
||k  s||kD  rt        d«      ‚|	j                  |
g||z
  z  «       |} ||«      }
ŒM  ||«      }|r||cxk  r|k  rn t        d«      ‚||k  rt        d«      ‚|	j                  |
g||z
  z  «       |	| _        y J d|z  «       ‚|| _        g | _        y )	Nr   )Úarrayr   ©r   rZ   r   zInvalid FDSelect rangezInvalid FDSelect sentinelzunsupported FDSelect format: %s)r  Úformatrn  r,   ÚtolistÚgidArrayr  r  r  r.   rá   )r>   r?   Ú	numGlyphsrp  Ú	maxGlyphsrn  Ú	readGlyphÚreadFDÚnRangesrr  ÚfdÚprevÚmaximumr5  ÚfirstÚsentinels                   r#   r¨   zFDSelect.__init__ž  sv  € Úä# D›/ˆDŒKØ�{‰{˜aÒÝ'á % c¨4¯9©9°YÓ+?Ó @× GÑ GÓ I�•Ø—‘ Ñ&Ø*.¯+©+¸Ò*:�JÄ
�	Ø&*§k¡k°QÒ&6�¼J�Ù# D›/�Ø�Ø�Ø�Ø'0Ð'8™)¸i�Ü˜w›ò &�AÙ% d›O�EØ˜Qš 5¨A¢:°%¸$²,À%È'Â/Ü(Ð)AÓBÐBØ—O‘O R D¨E°D©LÑ$9Ô:Ø �DÙ ›‘Bð&ñ % T›?�áØ$¨Ô;°GÔ;ô %Ð%@ÓAÐAð   4Ò'ä$Ð%@ÓAÐAØ—‘  ¨°4©Ñ 8Ô9Ø (�•àHÐ?À&ÑHÓH�uð !ˆDŒKØˆD�MrC   c                 ó,   — t        | j                  «      S rE   )rF   rr  rG   s    r#   rH   zFDSelect.__len__Æ  s   € Ü�4—=‘=Ó!Ð!rC   c                 ó    — | j                   |   S rE   ©rr  ©r>   rR   s     r#   rW   zFDSelect.__getitem__É  s   € Ø�}‰}˜UÑ#Ð#rC   c                 ó"   — || j                   |<   y rE   r  )r>   rR   ÚfdSelectValues      r#   r  zFDSelect.__setitem__Ì  s   € Ø,ˆ�‰�eÒrC   c                 ó:   — | j                   j                  |«       y rE   )rr  rd   )r>   r‚  s     r#   rd   zFDSelect.appendÏ  s   € Ø�‰×Ñ˜]Õ+rC   ©NNNN)rŸ   r    r¡   r¨   rH   rW   r  rd   r£   rC   r#   rl  rl  �  s   „ ó&òP"ò$ò-ó,rC   rl  c                   óV   — e Zd ZdZ	 	 dd„Zd„ Zd„ Zd„ ZeZd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zy)re   a  The ``CharStrings`` in the font represent the instructions for drawing
    each glyph. This object presents a dictionary interface to the font's
    CharStrings, indexed by glyph name:

    .. code:: python

            tt["CFF "].cff[0].CharStrings["a"]
            # <T2CharString (bytecode) at 103451e90>

    See :class:`fontTools.misc.psCharStrings.T1CharString` and
    :class:`fontTools.misc.psCharStrings.T2CharString` for how to decompile,
    compile and interpret the glyph drawing instructions in the returned objects.

    Nc	                 ó  — || _         || _        |�Ht        ||||||¬«      | _        i x| _        }	t        t        |«      «      D ]
  }
|
|	||
   <   Œ d| _        y i | _        d| _        || _        |�|| _	        |�|| _
        y y )Nr%   r   r   )r(  ÚvarStorer=  ÚcharStringsIndexÚcharStringsr  rF   ÚcharStringsAreIndexedr)  r*  r‹   )r>   r?   r\   r(  r)  r*  r‹   r&   r‡  r‰  r5  s              r#   r¨   zCharStrings.__init__ã  s¨   € ð 'ˆÔØ ˆŒØÐÜ$.Ø�k 7¨H°gÀfô%ˆDÔ!ð .0Ð/ˆDÔ˜{Üœ3˜w›<Ó(ò ,�Ø*+�˜G A™JÒ'ð,ð *+ˆDÕ&à!ˆDÔà)*ˆDÔ&Ø"ˆDŒLØÐ#Ø (�”ØÐ"Ø&�•ð #rC   c                 óH   — t        | j                  j                  «       «      S rE   )r3   r‰  rJ   rG   s    r#   rJ   zCharStrings.keys  s   € Ü�D×$Ñ$×)Ñ)Ó+Ó,Ð,rC   c                 óx   — | j                   r| j                  S t        | j                  j	                  «       «      S rE   )rŠ  rˆ  r3   r‰  rL   rG   s    r#   rL   zCharStrings.values  s1   € Ø×%Ò%Ø×(Ñ(Ð(ä˜×(Ñ(×/Ñ/Ó1Ó2Ð2rC   c                 ó   — || j                   v S rE   )r‰  )r>   rV   s     r#   Úhas_keyzCharStrings.has_key  s   € Ø�t×'Ñ'Ð'Ð'rC   c                 ó,   — t        | j                  «      S rE   )rF   r‰  rG   s    r#   rH   zCharStrings.__len__  s   € Ü�4×#Ñ#Ó$Ð$rC   c                 óZ   — | j                   |   }| j                  r| j                  |   }|S rE   )r‰  rŠ  rˆ  )r>   rV   Ú
charStrings      r#   rW   zCharStrings.__getitem__  s1   € Ø×%Ñ% dÑ+ˆ
Ø×%Ò%Ø×.Ñ.¨zÑ:ˆJØÐrC   c                 óx   — | j                   r| j                  |   }|| j                  |<   y || j                  |<   y rE   )rŠ  r‰  rˆ  )r>   rV   r‘  rR   s       r#   r  zCharStrings.__setitem__  s;   € Ø×%Ò%Ø×$Ñ$ TÑ*ˆEØ+5ˆD×!Ñ! %Ò(à%/ˆD×Ñ˜TÒ"rC   c                 óþ   — | j                   r*| j                  |   }| j                  j                  |«      S t	        | d«      r)t	        | d«      r| j                  |   j
                  }nd}nd }| j                  |   |fS )Nr‹   r*  r   )rŠ  r‰  rˆ  r9  rO   ÚfdSelectIndex)r>   rV   rR   r8  s       r#   r9  zCharStrings.getItemAndSelector"  s|   € Ø×%Ò%Ø×$Ñ$ TÑ*ˆEØ×(Ñ(×;Ñ;¸EÓBÐBä�t˜YÔ'Ü˜4 Ô,Ø×*Ñ*¨4Ñ0×>Ñ>‘Cà‘Cà�Ø×#Ñ# DÑ)¨3Ð.Ð.rC   c                 óˆ  — t        | j                  «       «      }|D ]¤  }| j                  |«      \  }}|j                  «       rdg}ng }|€|j	                  dd|fg|z   «       n|j	                  dd|fd|fg|z   «       |j                  «        |j                  |«       |j                  d«       |j                  «        Œ¦ y )N)r1  r   r0  rV   r”  )ÚsortedrJ   r9  r4  ry   rx   rz   r{   )r>   r|   ÚnamesrV   ÚcharStrr”  r1  s          r#   rz   zCharStrings.toXML0  sË   € Ü�t—y‘y“{Ó#ˆØò 	 ˆDØ%)×%<Ñ%<¸TÓ%BÑ"ˆG�]Ø×)Ñ)Ô+Ø!�l‘à�ØÐ$Ø×"Ñ" <°6¸4°.Ð1AÀCÑ1GÕHà×"Ñ"Ø Ø˜d�^ o°}Ð%EÐFÈÑLôð ×ÑÔØ�M‰M˜)Ô$Ø×Ñ˜\Ô*Ø×ÑÕñ!	 rC   c                 óŽ  — |D ]¯  }t        |t        «      rŒ|\  }}}|dk7  rŒ d}t        | d«      r)	 t        |d   «      }| j
                  |   j                  }n| j                  }|d   }t        j                  } ||| j                  ¬«      }	|	j                  |||«       |dk\  r||	_        |	| |<   Œ± y # t        $ r d}Y Œƒw xY w)Nr0  r­   r‹   r”  r   rV   r,  )rP   rQ   rO   r   rS   r‹   r�   r)  r   r†   r(  rƒ   r”  )
r>   rV   rˆ   r‰   rŠ   ÚfdIDr)  Ú	glyphNamer;  r‘  s
             r#   rƒ   zCharStrings.fromXMLD  sÝ   € Øò 	)ˆGÜ˜'¤3Ô'ØØ#*Ñ ˆD�%˜Ø�|Ò#ØØˆDÜ�t˜YÔ'ðÜ# E¨/Ñ$:Ó;�Dð Ÿ,™, tÑ,×4Ñ4‘àŸ,™,�à˜f™ˆIÜ+×8Ñ8ˆOÙ(°Àd×FVÑFVÔWˆJØ×Ñ˜t U¨GÔ4Ø�qŠyØ+/�
Ô(Ø(ˆD�ŠOñ-	)øô  ò Ø’Dðús   ²B6Â6CÃCr%  )rŸ   r    r¡   r¢   r¨   rJ   rL   rŽ  Ú__contains__rH   rW   r  r9  rz   rƒ   r£   rC   r#   re   re   Ó  sI   „ ñð. Øó'òB-ò3ò(ð €Lò%òò0ò/ò ó()rC   re   c                 ó6   — t        | j                  d«      «      S r  )r   r,   )r?   s    r#   r  r  ^  s   € Ü�4—9‘9˜Q“<Ó Ð rC   c                 óT   — t        j                  d| j                  d«      «      \  }|S )Nr'   r   ©r/   r*   r,   ©r?   rs   s     r#   r  r  b  ó!   € Ü�}‰}˜T 4§9¡9¨Q£<Ó0�H€UØ€LrC   c                 óT   — t        j                  d| j                  d«      «      \  }|S )Nr	  rZ   rŸ  r   s     r#   r  r  g  r¡  rC   c                 ó8   — | j                  t        |«      «       y rE   )r³   r   r   s     r#   rÒ   rÒ   l  s   € Ø‡J�JŒw�u‹~ÕrC   c                 óN   — | j                  t        j                  d|«      «       y ©Nr'   ©r³   r/   rb   r   s     r#   rÑ   rÑ   p  ó   € Ø‡J�JŒv�{‰{˜4 Ó'Õ(rC   c                 óN   — | j                  t        j                  d|«      «       y ©Nr	  r¦  r   s     r#   rÐ   rÐ   t  r§  rC   c                 ó   — t        | «      S rE   )r   rr   s    r#   Ú	packCard8r«  x  s   € Ü�5‹>ÐrC   c                 ó.   — t        j                  d| «      S r¥  ©r/   rb   rr   s    r#   Ú
packCard16r®  |  ó   € Ü�;‰;�t˜UÓ#Ð#rC   c                 ó.   — t        j                  d| «      S r©  r­  rr   s    r#   Ú
packCard32r±  €  r¯  rC   c                 ó2   — i }| D ]  \  }}}}}||f||<   Œ |S rE   r£   ©rª   ÚdÚoprV   ÚargÚdefaultÚconvs          r#   ÚbuildOperatorDictr¹  „  s3   € Ø
€AØ(-ò Ñ$ˆˆD�#�w Ø�s�ˆˆ"Šðà€HrC   c                 ó¤   — i }| D ]H  \  }}}}}t        |t        «      rt        |d   «      t        |d   «      z   }nt        |«      }||f||<   ŒJ |S ©Nr   r   )rP   r_  r   r³  s          r#   ÚbuildOpcodeDictr¼  ‹  sb   € Ø
€AØ(-ò Ñ$ˆˆD�#�w Ü�bœ%Ô Ü˜˜A™“¤'¨"¨Q©%£.Ñ0‰Bä˜“ˆBØ�s�)ˆˆ$Šðð €HrC   c                 óF   — g }| D ]  \  }}}}}|j                  |«       Œ |S rE   )rd   )rª   Úlrµ  rV   r¶  r·  r¸  s          r#   Ú
buildOrderr¿  –  s1   € Ø
€AØ(-ò Ñ$ˆˆD�#�w Ø	�‰��ðà€HrC   c                 ó4   — i }| D ]  \  }}}}}|€Œ|||<   Œ |S rE   r£   r³  s          r#   ÚbuildDefaultsrÁ  �  s7   € Ø
€AØ(-ò Ñ$ˆˆD�#�w ØÑØˆAˆdŠGðð €HrC   c                 ó.   — i }| D ]  \  }}}}}|||<   Œ |S rE   r£   r³  s          r#   ÚbuildConvertersrÃ  ¥  s/   € Ø
€AØ(-ò Ñ$ˆˆD�#�w Øˆˆ$Šðà€HrC   c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚSimpleConverterc                 óê   — t        |d«      s| j                  ||«      S |j                  }|j                  «       }	 | j                  ||«      |j	                  |«       S # |j	                  |«       w xY w)Nr?   )rO   Ú_readr?   r±   r1   )r>   rÃ   rs   r?   rµ   s        r#   r,   zSimpleConverter.read­  s[   € Ü�v˜vÔ&Ø—:‘:˜f eÓ,Ð,Ø�{‰{ˆØ�i‰i‹kˆð	Ø—:‘:˜f eÓ,à�I‰I�c�NøˆD�I‰I�c�Nús   ¼A ÁA2c                 ó   — |S rE   r£   ©r>   rÃ   rs   s      r#   rÇ  zSimpleConverter._read·  rÆ   rC   c                 ó   — |S rE   r£   rÉ  s      r#   r³   zSimpleConverter.writeº  rÆ   rC   c                 óJ   — |j                  ||¬«       |j                  «        y )Nrr   )rw   rx   ©r>   r|   rV   rs   s       r#   ÚxmlWritezSimpleConverter.xmlWrite½  s!   € Ø×Ñ˜D¨ÐÔ.Ø×ÑÕrC   c                 ó   — |d   S ©Nrs   r£   ©r>   rV   rˆ   r‰   rÃ   s        r#   r`  zSimpleConverter.xmlReadÁ  s   € Ø�W‰~ÐrC   N)rŸ   r    r¡   r,   rÇ  r³   rÍ  r`  r£   rC   r#   rÅ  rÅ  ¬  s   „ òòòòórC   rÅ  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚASCIIConverterc                 ó   — t        |d¬«      S ©NÚasciir   r    rÉ  s      r#   rÇ  zASCIIConverter._readÆ  s   € Ü�U WÔ-Ð-rC   c                 ó   — t        |d¬«      S rÔ  ©r
   rÉ  s      r#   r³   zASCIIConverter.writeÉ  s   € Ü�u wÔ/Ð/rC   c                 ó`   — |j                  |t        |d¬«      ¬«       |j                  «        y )NrÕ  r   rr   ©rw   r   rx   rÌ  s       r#   rÍ  zASCIIConverter.xmlWriteÌ  s(   € Ø×Ñ˜D¬¨e¸gÔ(FÐÔGØ×ÑÕrC   c                 ó"   — t        |d   d¬«      S )Nrs   rÕ  r   r×  rÐ  s        r#   r`  zASCIIConverter.xmlReadÐ  s   € Ü�u˜W‘~°Ô:Ð:rC   N©rŸ   r    r¡   rÇ  r³   rÍ  r`  r£   rC   r#   rÒ  rÒ  Å  s   „ ò.ò0òó;rC   rÒ  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚLatin1Converterc                 ó   — t        |d¬«      S ©Nr   r   r    rÉ  s      r#   rÇ  zLatin1Converter._readÕ  s   € Ü�U XÔ.Ð.rC   c                 ó   — t        |d¬«      S rß  r×  rÉ  s      r#   r³   zLatin1Converter.writeØ  s   € Ü�u xÔ0Ð0rC   c                 óš   — t        |d¬«      }|dv rt        j                  dd|«      }|j                  ||¬«       |j	                  «        y )Nr   r   )ÚNoticeÚ	Copyrightz	[\r\n]\s+ú rr   )r   ÚreÚsubrw   rx   rÌ  s       r#   rÍ  zLatin1Converter.xmlWriteÛ  sH   € Ü�e hÔ/ˆØÐ*Ñ*Ü—F‘F˜<¨¨eÓ4ˆEØ×Ñ˜D¨ÐÔ.Ø×ÑÕrC   c                 ó"   — t        |d   d¬«      S )Nrs   r   r   r×  rÐ  s        r#   r`  zLatin1Converter.xmlReadâ  s   € Ü�u˜W‘~°Ô;Ð;rC   NrÛ  r£   rC   r#   rÝ  rÝ  Ô  s   „ ò/ò1òó<rC   rÝ  c                 óD   — 	 t        | «      }|S #  t        | «      }Y |S xY wrE   )r‡   Úfloat)r"   rs   s     r#   ÚparseNumrê  æ  s,   € ðÜ�A“ˆð €LøðÜ�a“‰Ø€Lús   ‚ �c                 óî   — g }| D ]U  }t        |t        «      rŒ|\  }}}|d   j                  «       }|D �cg c]  }t        |«      ‘Œ }}|j	                  |«       ŒW t        |«      dk(  r|d   }|S c c}w )Nrs   r   r   )rP   rQ   Úsplitr   rd   rF   )r"   Ú	valueListrŠ   rV   rˆ   r‰   Ú	blendListÚvals           r#   ÚparseBlendListrð  î  sˆ   € Ø€IØò $ˆÜ�gœsÔ#ØØ&Ñˆˆe�WØ˜'‘N×(Ñ(Ó*ˆ	Ø.7Ö8 s”X˜c•]Ð8ˆ	Ð8Ø×Ñ˜Õ#ð$ô ˆ9ƒ~˜ÒØ˜a‘Lˆ	ØÐùò	 9s   ¶A2c                   ó   — e Zd Zd„ Zd„ Zy)ÚNumberConverterc                 óØ  — t        |t        «      r²|j                  |«       |j                  «        |j	                  «        dj                  |D �cg c]  }t        |«      ‘Œ c}«      }|j                  t        |¬«       |j                  «        |j                  «        |j                  |«       |j                  «        y |j                  ||¬«       |j                  «        y c c}w )Nrä  rr   ©rP   r3   ry   rx   ÚindentÚjoinrQ   rw   ÚkBlendDictOpNameÚdedentr{   )r>   r|   rV   rs   rï  Ú
blendValues         r#   rÍ  zNumberConverter.xmlWriteý  s¹   € Ü�eœTÔ"Ø×Ñ˜tÔ$Ø×ÑÔØ×ÑÔØŸ™°uÖ"=°¤3 s¥8Ò"=Ó>ˆJØ×ÑÔ 0¸
ÐÔCØ×ÑÔØ×ÑÔØ×Ñ˜TÔ"Ø×ÑÕà×Ñ ¨EÐÔ2Ø×ÑÕùò #>s   ÁC'c                 ód   — |j                  dd «      }|€t        |«      }|S t        |d   «      }|S rÏ  )Úgetrð  rê  )r>   rV   rˆ   r‰   rÃ   ÚvalueStringrs   s          r#   r`  zNumberConverter.xmlRead  s>   € Ø—i‘i ¨Ó.ˆØÐÜ" 7Ó+ˆEð ˆô ˜U 7™^Ó,ˆEØˆrC   N©rŸ   r    r¡   rÍ  r`  r£   rC   r#   rò  rò  ü  s   „ ò órC   rò  c                   ó   — e Zd Zd„ Zd„ Zy)ÚArrayConverterc           	      óJ  — |rÌt        |d   t        «      r¹|j                  |«       |j                  «        |j	                  «        |D ]Q  }dj                  |D �cg c]  }t        |«      ‘Œ c}«      }|j                  t        |¬«       |j                  «        ŒS |j                  «        |j                  |«       |j                  «        y dj                  |D �cg c]  }t        |«      ‘Œ c}«      }|j                  ||¬«       |j                  «        y c c}w c c}w )Nr   rä  rr   rô  )r>   r|   rV   rs   rí  rï  rù  s          r#   rÍ  zArrayConverter.xmlWrite  só   € Ù”Z  a¡¬$Ô/Ø×Ñ˜tÔ$Ø×ÑÔØ×ÑÔØ"ò $�	Ø ŸX™X¸9Ö&E°C¤s¨3¥xÒ&EÓF�
Ø×#Ñ#Ô$4¸JÐ#ÔGØ×!Ñ!Õ#ð$ð ×ÑÔØ×Ñ˜TÔ"Ø×ÑÕà—H‘H°%Ö8¨3œc #�hÒ8Ó9ˆEØ×Ñ ¨EÐÔ2Ø×ÑÕùò 'Fùò 9s   ÁD
ÃD c                 ó¢   — |j                  dd «      }|€t        |«      }|S |j                  «       }|D �cg c]  }t        |«      ‘Œ }}|S c c}w rÏ  )rû  rð  rì  rê  )	r>   rV   rˆ   r‰   rÃ   rü  rí  rL   rs   s	            r#   r`  zArrayConverter.xmlRead'  s\   € Ø—i‘i ¨Ó.ˆØÐÜ& wÓ/ˆIð Ðð !×&Ñ&Ó(ˆFØ6<Ö=¨Uœ %�Ð=ˆIÐ=ØÐùò >s   ¶ANrý  r£   rC   r#   rÿ  rÿ    s   „ ò ó"rC   rÿ  c                   ó   — e Zd Zd„ Zd„ Zy)ÚTableConverterc                 óª   — |j                  |«       |j                  «        |j                  |«       |j                  |«       |j                  «        y rE   )ry   rx   rz   r{   rÌ  s       r#   rÍ  zTableConverter.xmlWrite2  sB   € Ø×Ñ˜4Ô Ø×ÑÔØ�‰�IÔØ×Ñ˜ÔØ×ÑÕrC   c                 ó’   —  | j                  «       «       }|D ],  }t        |t        «      rŒ|\  }}}|j                  |||«       Œ. |S rE   )ÚgetClassrP   rQ   rƒ   )r>   rV   rˆ   r‰   rÃ   ÚobrŠ   s          r#   r`  zTableConverter.xmlRead9  sQ   € ØˆT�]‰]‹_ÓˆØò 	-ˆGÜ˜'¤3Ô'ØØ#*Ñ ˆD�%˜Ø�J‰J�t˜U GÕ,ð		-ð
 ˆ	rC   Nrý  r£   rC   r#   r  r  1  s   „ òórC   r  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚPrivateDictConverterc                 ó   — t         S rE   )ÚPrivateDictrG   s    r#   r  zPrivateDictConverter.getClassD  s   € ÜÐrC   c                 ó6  — |\  }}|j                   }|j                  }	 |j                  }t	        |j
                  ||||¬«      }|j                  |«       |j                  |«      }	t        |	«      |k(  sJ ‚|j                  |	«       |S # t        $ r d }Y Œlw xY wrM  )
r?   r  r…   ÚAttributeErrorr  r9   r1   r,   rF   rB   )
r>   rÃ   rs   r  rÓ   r?   r&   r…   Úprivr¦   s
             r#   rÇ  zPrivateDictConverter._readG  s•   € Ø‰ˆˆfØ�{‰{ˆØ—‘ˆð	Ø—]‘]ˆFô ˜6Ÿ>™>¨4°ÀÈvÔVˆØ�	‰	�&ÔØ�y‰y˜‹ˆÜ�4‹y˜DÒ Ð Ð Ø�‰�tÔØˆøô ò 	ØŠFð	ús   ŸB
 Â
BÂBc                  ó   — y)N©r   r   r£   rÉ  s      r#   r³   zPrivateDictConverter.writeV  s   € ØrC   N©rŸ   r    r¡   r  rÇ  r³   r£   rC   r#   r	  r	  C  s   „ òòórC   r	  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚSubrsConverterc                 ó   — t         S rE   )r=  rG   s    r#   r  zSubrsConverter.getClass[  s   € ÜÐrC   c                 óˆ   — |j                   }|j                  }|j                  |j                  |z   «       t	        ||¬«      S r  )r?   r  r1   rÓ   r=  )r>   rÃ   rs   r?   r&   s        r#   rÇ  zSubrsConverter._read^  s6   € Ø�{‰{ˆØ—‘ˆØ�	‰	�&—-‘- %Ñ'Ô(Ü˜$ vÔ.Ð.rC   c                  ó   — yrã   r£   rÉ  s      r#   r³   zSubrsConverter.writed  ó   € ØrC   Nr  r£   rC   r#   r  r  Z  s   „ òò/órC   r  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚCharStringsConverterc           
      óV  — |j                   }|j                  }|j                  }t        |dd «      }|j                  }t        |d«      r*|j                  }t        |d«      r|j                  }	nd }	d }
nd\  }	}|j                  }
|j                  |«       t        ||||
|	|||¬«      }|S )Nr€   r„   rl  r%  )r&   r‡  )r?   r  r\   Úgetattrr=   rO   r„   rl  r�   r1   re   )r>   rÃ   rs   r?   r&   r\   r‡  r(  r‹   r*  r)  r‰  s               r#   rÇ  zCharStringsConverter._readi  s¯   € Ø�{‰{ˆØ—‘ˆØ—.‘.ˆÜ˜6 :¨tÓ4ˆØ×(Ñ(ˆÜ�6˜9Ô%Ø—n‘nˆGÜ�v˜zÔ*Ø!Ÿ?™?‘à�Ø‰Gà *ÑˆH�gØ—n‘nˆGØ�	‰	�%ÔÜ!ØØØØØØØØô	
ˆð ÐrC   c                  ó   — yrã   r£   rÉ  s      r#   r³   zCharStringsConverter.write†  r  rC   c                 ó  — t        |d«      r*|j                  }t        |d«      r|j                  }nd }d }n|j                  d d }}}t	        d d |j
                  |||t        |dd «      ¬«      }|j                  |||«       |S )Nr„   rl  r€   )r‡  )rO   r„   rl  r�   re   r=   r  rƒ   )	r>   rV   rˆ   r‰   rÃ   r‹   r*  r)  r‰  s	            r#   r`  zCharStringsConverter.xmlRead‰  s�   € Ü�6˜9Ô%ð —n‘nˆGÜ�v˜zÔ*Ø!Ÿ?™?‘à�Ø‰Gð
 *0¯©¸¸t˜w�XˆGÜ!ØØØ×ÑØØØÜ˜V Z°Ó6ô
ˆð 	×Ñ˜D %¨Ô1ØÐrC   N©rŸ   r    r¡   rÇ  r³   r`  r£   rC   r#   r  r  h  s   „ òò:órC   r  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚCharsetConverterc                 ó¨  — t        |d«      }|dkD  �rY|j                  }|j                  }|j                  |«       t        j	                  t
        d|«       t        |«      }|dk(  rt        |||j                  |«      }n*|dk(  s|dk(  rt        |||j                  ||«      }nt        ‚t        |«      |k(  sJ ‚t        j	                  t
        d|j                  «       «       i }g }	|D ]}  }
|
|v ra||
   }t        |«      t        |«      z  }|
dz   t        |«      z   |v r|dz  }|
dz   t        |«      z   |v rŒ|dz   ||
<   |
dz   t        |«      z   }
d||
<   |	j                  |
«       Œ |	}n=|sd|j                   vr
|dk(  sJ ‚d }n#|dk(  rt"        }n|dk(  rt$        }n|dk(  rt&        }r't        |«      |j                  k7  r|d |j                   }|S )	NÚROSr   zloading charset at %sr   r   z    charset end at %sú.re   )rO   rs  r?   r1   r®   r¯   r  ÚparseCharset0r9   ÚparseCharsetÚNotImplementedErrorrF   r±   rf   rQ   rd   rñ   ÚcffISOAdobeStringsÚcffIExpertStringsÚcffExpertSubsetStrings)r>   rÃ   rs   ÚisCIDrs  r?   rp  r\   ÚallNamesÚ
newCharsetr›  Únr—  s                r#   rÇ  zCharsetConverter._read¦  sÞ  € Ü˜ Ó&ˆØ�1‹9Ø×(Ñ(ˆIØ—;‘;ˆDØ�I‰I�eÔÜ�G‰G”EÐ2°EÔ:Ü˜t“_ˆFØ˜Š{Ü'¨	°4¸¿¹ÈÓO‘Ø˜1’ ¨!¢Ü& y°$¸¿¹ÈÈvÓV‘ä)Ð)Ü�w“< 9Ò,Ð,Ð,Ü�G‰G”EÐ2°D·I±I³KÔ@àˆHØˆJØ$ò 
-�	Ø Ñ(à  Ñ+�AÜ ›M¬C°«LÑ8�EØ$ s™?¬S°«VÑ3¸Ñ=Ø˜Q™˜ð % s™?¬S°«VÑ3¸Ò=à*+¨a©%�H˜YÑ'Ø )¨C¡´#°a³&Ñ 8�IØ&'�˜Ñ#Ø×!Ñ! )Õ,ð
-ð !‰Gá˜¨V¯^©^Ñ;ð  ’zÐ!�zØ‘Ø˜!’Ü,‘Ø˜!’Ü+‘Ø˜!’Ü0�Ùœ˜G›¨×(8Ñ(8Ò8ØÐ0 × 0Ñ 0Ð1ˆGØˆrC   c                  ó   — yrã   r£   rÉ  s      r#   r³   zCharsetConverter.writeÕ  r  rC   c                 óF   — |j                  d«       |j                  «        y )Nz8charset is dumped separately as the 'GlyphOrder' element)r3  rx   rÌ  s       r#   rÍ  zCharsetConverter.xmlWriteØ  s   € ð 	×ÑÐTÔUØ×ÑÕrC   c                  ó   — y rE   r£   rÐ  s        r#   r`  zCharsetConverter.xmlReadß  ó   € ØrC   NrÛ  r£   rC   r#   r   r   ¥  s   „ ò-ò^òórC   r   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚCharsetCompilerc                 óà   — |d   dk(  sJ ‚t        |j                  d«      }t        |||«      }t        |||«      }t	        |«      t	        |«      k  r|| _        || _        y || _        || _        y )Nr   ú.notdefr"  )rO   ÚdictObjÚpackCharset0ÚpackCharsetrF   r¦   rÃ   )r>   r9   r\   rÃ   r*  Údata0r¦   s          r#   r¨   zCharsetCompiler.__init__ä  sp   € Ø�q‰z˜YÒ&Ð&Ð&Ü˜Ÿ™¨Ó.ˆÜ˜W e¨WÓ5ˆÜ˜7 E¨7Ó3ˆÜˆt‹9”s˜5“zÒ!ØˆDŒIð ˆ�ð ˆDŒIØˆ�rC   c                 ó6   — || j                   j                  d<   y )Nr\   rð   rò   s      r#   r¬   zCharsetCompiler.setPosï  ró   rC   c                 ó,   — t        | j                  «      S rE   rb  rG   s    r#   rc   zCharsetCompiler.getDataLengthò  rc  rC   c                 ó:   — |j                  | j                  «       y rE   ©r³   r¦   ©r>   r?   s     r#   rh   zCharsetCompiler.toFileõ  ó   € Ø�
‰
�4—9‘9ÕrC   N©rŸ   r    r¡   r¨   r¬   rc   rh   r£   rC   r#   r3  r3  ã  s   „ ò	ò-òórC   r3  c                 óÚ   — d }t         t        dft        t        dft        t
        dfg}t        | «      }|D ]2  \  }}}|� |S ||kD  rŒ|}t        |«      D ]  }| |   ||   k7  sŒd } Œ2 Œ4 |S )Nr   r   r   )ÚcffISOAdobeStringCountr'  ÚcffExpertStringCountr(  ÚcffExpertSubsetStringCountr)  rF   r  )r\   ÚpredefinedCharSetValÚpredefinedCharSetsÚlcsÚcntÚpcsÚcsvr5  s           r#   ÚgetStdCharSetrK  ù  s¨   € àÐä	Ô!3°QÐ7Ü	Ô0°!Ð4Ü	#Ô%;¸QÐ?ðÐô
 ˆg‹,€CØ+ò 	‰ˆˆS�#ØÐ+Øð  Ðð �Š9ØØ"ÐÜ�s“ò 	ˆAØ�q‰z˜S ™VÓ#Ø'+Ð$Ùñ	ð	ð  ÐrC   c                 ó   — t        | dd  «      S )Nr   )r‡   ©rV   r9   s     r#   ÚgetCIDfromNamerN    s   € Üˆt�A�Bˆx‹=ÐrC   c                 ó$   — |j                  | «      S rE   )ÚgetSIDrM  s     r#   ÚgetSIDfromNamerQ    s   € Ø�>‰>˜$ÓÐrC   c           	      ó¨   — d}t        |«      g}|rt        }nt        }| dd  D ]#  }|j                  t	         |||«      «      «       Œ% t        |«      S r»  )r«  rN  rQ  rd   r®  r	   )r\   r*  r9   Úfmtr¦   Ú	getNameIDrV   s          r#   r7  r7    sW   € Ø
€CÜ�c‹NÐ€DÙÜ"‰	ä"ˆ	à˜˜�ò :ˆØ�‰”J™y¨¨wÓ7Ó8Õ9ð:ä�T‹?ÐrC   c                 ó¤  — d}g }d }d}|rt         }nt        }| dd  D ];  } |||«      }	|€|	}n)|dz   |	k7  r!||z
  }
|
dkD  rd}|j                  ||
f«       |	}|	}Œ= |r||z
  }
|
dkD  rd}|j                  ||
f«       t        |«      g}|dk(  rt        }nt        }|D ](  \  }}
|j                  t	        |«       ||
«      z   «       Œ* t        |«      S )Nr   r   éÿ   r   )rN  rQ  rd   r«  r®  r	   )r\   r*  r9   rS  Úrangesr{  ÚendrT  rV   ÚSIDÚnLeftr¦   Ú	nLeftFuncs                r#   r8  r8  $  s  € Ø
€CØ€FØ€EØ
€CÙÜ"‰	ä"ˆ	à˜˜�ò 
ˆÙ˜˜gÓ&ˆØˆ=Ø‰EØ�1‰W˜Š^Ø˜%‘KˆEØ�sŠ{Ø�Ø�M‰M˜5 %˜.Ô)ØˆEØ‰ð
ñ Ø�e‘ˆØ�3Š;ØˆCØ�‰�u˜e�nÔ%ä�c‹NÐ€DØ
ˆa‚xÜ‰	äˆ	Øò :‰ˆˆuØ�‰”J˜uÓ%©	°%Ó(8Ñ8Õ9ð:ä�T‹?ÐrC   c                 ó  — dg}|rLt        | dz
  «      D ]9  }t        |«      }|j                  dt        |«      j	                  d«      z   «       Œ; |S t        | dz
  «      D ]!  }t        |«      }|j                  ||   «       Œ# |S ©Nr5  r   ÚcidrY   )r  r  rd   rQ   Úzfill)rs  r?   r9   r*  r\   r5  ÚCIDrY  s           r#   r$  r$  I  sŽ   € Øˆk€GÙÜ�y 1‘}Ó%ò 	6ˆAÜ˜TÓ"ˆCØ�N‰N˜5¤3 s£8§>¡>°!Ó#4Ñ4Õ5ð	6ð €Nô �y 1‘}Ó%ò 	)ˆAÜ˜TÓ"ˆCØ�N‰N˜7 3™<Õ(ð	)ð €NrC   c                 ób  — dg}d}|dk(  rt         }nt        }|| k  r’t        |«      } ||«      }	|rDt        |||	z   dz   «      D ].  }
|j                  dt	        |
«      j                  d«      z   «       Œ0 n+t        |||	z   dz   «      D ]  }|j                  ||   «       Œ ||	z   dz   }|| k  rŒ’|S r]  )r  r  r  rd   rQ   r_  )rs  r?   r9   r*  rS  r\   rm   r[  r{  rZ  r`  rY  s               r#   r%  r%  V  sÊ   € Øˆk€GØ€EØ
ˆa‚xÜ‰	äˆ	Ø
�)Ò
Ü˜4Ó ˆÙ˜$“ˆÙÜ˜U E¨E¡M°AÑ$5Ó6ò :�Ø—‘˜u¤s¨3£x§~¡~°aÓ'8Ñ8Õ9ñ:ô ˜U E¨E¡M°AÑ$5Ó6ò -�Ø—‘˜w s™|Õ,ð-à˜‘ Ñ!ˆð �)Ó
ð €NrC   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚEncodingCompilerc                 ó<  — t        |t        «      rJ ‚t        |j                  j                  ||j
                  «      }t        |j                  j                  ||j
                  «      }t        |«      t        |«      k  r|| _        || _	        y || _        || _	        y rE   )
rP   rQ   ÚpackEncoding0r6  r\   r9   ÚpackEncoding1rF   r¦   rÃ   )r>   r9   r   rÃ   r9  Údata1s         r#   r¨   zEncodingCompiler.__init__k  sz   € Ü˜h¬Ô,Ð,Ð,Ü˜fŸn™n×4Ñ4°hÀÇÁÓOˆÜ˜fŸn™n×4Ñ4°hÀÇÁÓOˆÜˆu‹:œ˜E›
Ò"ØˆDŒIð ˆ�ð ˆDŒIØˆ�rC   c                 ó6   — || j                   j                  d<   y )NÚEncodingrð   rò   s      r#   r¬   zEncodingCompiler.setPosu  ó   € Ø*-ˆ�‰×Ñ˜JÒ'rC   c                 ó,   — t        | j                  «      S rE   rb  rG   s    r#   rc   zEncodingCompiler.getDataLengthx  rc  rC   c                 ó:   — |j                  | j                  «       y rE   r=  r>  s     r#   rh   zEncodingCompiler.toFile{  r?  rC   Nr@  r£   rC   r#   rc  rc  j  s   „ òò.òórC   rc  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚEncodingConverterc                 ó–  — |dk(  ry|dk(  ry|dkD  sJ ‚|j                   }|j                  |«       t        j                  t        d|«       t	        |«      }t        |dz  «      }|dz  }|dk(  rt        |j                  |«      }n*|dk(  rt        |j                  |«      }nt        d|› �«      ‚|rt        |||j                  «       |S )	Nr   ÚStandardEncodingr   ÚExpertEncodingzloading Encoding at %sé€   é   zUnknown Encoding format: )r?   r1   r®   r¯   r  ÚboolÚparseEncoding0r\   ÚparseEncoding1r.   ÚparseEncodingSupplementr9   )r>   rÃ   rs   r?   rS  ÚhaveSupplementr   s          r#   rÇ  zEncodingConverter._read€  sÁ   € Ø�AŠ:Ø%Ø�aŠZØ#à�qŠyÐˆyØ�{‰{ˆØ�	‰	�%ÔÜ�‰”Ð/°Ô7Ü˜‹oˆÜ˜c D™jÓ)ˆØ�D‰jˆà�!Š8Ü% f§n¡n°dÓ;‰HØ�AŠXÜ% f§n¡n°dÓ;‰HäÐ8¸¸Ð>Ó?Ð?áÜ# D¨(°F·N±NÔCàˆrC   c                 ó   — |dk(  ry|dk(  ryy)Nrp  r   rq  r   r£   rÉ  s      r#   r³   zEncodingConverter.writeš  s   € ØÐ&Ò&ØØÐ&Ò&ØØrC   c                 óz  — |dv r$|j                  ||¬«       |j                  «        y |j                  |«       |j                  «        t        t	        |«      «      D ]:  }||   }|dk7  sŒ|j                  dt        |«      |¬«       |j                  «        Œ< |j                  |«       |j                  «        y )N)rp  rq  rv   r5  Úmap)ÚcoderV   )rw   rx   ry   r  rF   Úhexr{   )r>   r|   rV   rs   r|  r›  s         r#   rÍ  zEncodingConverter.xmlWrite¡  s±   € ØÐ:Ñ:Ø×Ñ ¨5ÐÔ1Ø×ÑÔØØ×Ñ˜4Ô Ø×ÑÔÜœ#˜e›*Ó%ò 	$ˆDØ˜d™ˆIØ˜IÓ%Ø×#Ñ# E´°D³	À	Ð#ÔJØ×!Ñ!Õ#ð		$ð
 	×Ñ˜ÔØ×ÑÕrC   c                 ó�   — d|v r|d   S dgdz  }|D ]1  }t        |t        «      rŒ|\  }}}t        |d   «      }|d   }|||<   Œ3 |S )NrV   r5  r»   r|  )rP   rQ   r   )	r>   rV   rˆ   r‰   rÃ   r   rŠ   r|  r›  s	            r#   r`  zEncodingConverter.xmlRead°  sn   € Ø�U‰?Ø˜‘=Ð Ø�; Ñ$ˆØò 	'ˆGÜ˜'¤3Ô'ØØ#*Ñ ˆD�%˜Ü˜E &™MÓ*ˆDØ˜f™ˆIØ&ˆH�TŠNð	'ð ˆrC   NrÛ  r£   rC   r#   rn  rn    s   „ òò4òórC   rn  c                 óˆ   — | j                  d«      }t        |«      dk7  rt        d«      ‚t        j                  d|«      d   S )u3   Read a String ID (SID) â€” 2-byte unsigned integer.r   z(Unexpected end of file while reading SIDr'   r   )r,   rF   ÚEOFErrorr/   r*   )r?   r¦   s     r#   ÚreadSIDr�  ¾  s<   € à�9‰9�Q‹<€DÜ
ˆ4ƒy�A‚~ÜÐAÓBÐBÜ�=‰=˜˜tÓ$ QÑ'Ð'rC   c                 óz   — t        | «      }t        |«      D ]"  }t        | «      }t        | «      }||   }|||<   Œ$ y)z¼
    Parse the CFF Encoding supplement data:
      - nSups: number of supplementary mappings
      - each mapping: (code, SID) pair
    and apply them to the `encoding` list in place.
    N)r  r  r�  )r?   r   r9   ÚnSupsÚ_r|  ÚsidrV   s           r#   rw  rw  Æ  sD   € ô �d‹O€EÜ�5‹\ò ˆÜ˜‹ˆÜ�d‹mˆØ�s‰|ˆØˆ�Šñ	rC   c                 ó‚   — t        |«      }dgdz  }t        d|dz   «      D ]  }t        |«      }|dk7  sŒ| |   ||<   Œ |S )zl
    Format 0: simple list of codes.
    After reading the base table, optionally parse the supplement.
    r5  r»   r   r   ©r  r  )r\   r?   ÚnCodesr   ÚglyphIDr|  s         r#   ru  ru  Õ  sX   € ô
 �t‹_€FØˆ{˜SÑ €HÜ˜˜F Q™JÓ'ò .ˆÜ˜‹ˆØ�1‹9Ø$ WÑ-ˆH�TŠNð.ð
 €OrC   c                 óÂ   — t        |«      }dgdz  }d}t        |«      D ]=  }t        |«      }t        |«      }t        |dz   «      D ]  }| |   ||<   |dz  }|dz  }Œ Œ? |S )un   
    FormatÂ 1: range-based encoding.
    After reading the base ranges, optionally parse the supplement.
    r5  r»   r   r‡  )r\   r?   rw  r   r‰  r„  r|  rZ  s           r#   rv  rv  ä  s‚   € ô
 ˜‹o€GØˆ{˜SÑ €HØ€GÜ�7‹^ò ˆÜ˜‹ˆÜ˜$“ˆÜ�u˜q‘yÓ!ò 	ˆAØ$ WÑ-ˆH�T‰NØ�A‰IˆDØ�q‰L‰Gñ	ðð €OrC   c                 ó”  — d}i }t        t        |«      «      D ]  }||   }|dk7  sŒ|||<   Œ g }| dd  D ]$  }|j                  |«      }|j                  |«       Œ& |r|d   €|j	                  «        |r|d   €Œt        |«      t        t        |«      «      g}|D ]   }|€d}|j                  t        |«      «       Œ" t        |«      S )Nr   r5  r   r­   ©r  rF   rû  rd   Úpopr«  r	   )	r\   r   r9   rS  Úmr|  rV   Úcodesr¦   s	            r#   re  re  ÷  sæ   € Ø
€CØ
€AÜ”c˜(“mÓ$ò ˆØ˜‰~ˆØ�9ÓØˆAˆdŠGðð €EØ˜˜�ò ˆØ�u‰u�T‹{ˆØ�‰�TÕðñ �E˜"‘IÐ%Ø�	‰	Œñ �E˜"‘IÑ%ô �c‹NœI¤c¨%£jÓ1Ð2€DØò %ˆØˆ<ØˆDØ�‰”I˜d“OÕ$ð%ô �T‹?ÐrC   c                 ó:  — d}i }t        t        |«      «      D ]  }||   }|dk7  sŒ|||<   Œ g }d }d}	| dd  D ]=  }|j                  |d«      }|€|}n"|	dz   |k7  r|	|z
  }
|j                  ||
f«       |}|}	Œ? |	|z
  }
|j                  ||
f«       |r)|d   d   dk(  r|j	                  «        |r|d   d   dk(  rŒt        |«      t        t        |«      «      g}|D ]2  \  }}
|dk(  rd}|j                  t        |«      t        |
«      z   «       Œ4 t        |«      S )Nr   r5  r   r­   rŒ  )r\   r   r9   rS  rŽ  r|  rV   rW  r{  rX  rZ  r¦   s               r#   rf  rf    sV  € Ø
€CØ
€AÜ”c˜(“mÓ$ò ˆØ˜‰~ˆØ�9ÓØˆAˆdŠGðð €FØ€EØ
€CØ˜˜�ò ˆØ�u‰u�T˜2‹ˆØˆ=Ø‰EØ�1‰W˜Š_Ø˜%‘KˆEØ�M‰M˜5 %˜.Ô)ØˆEØ‰ðð �%‰K€EØ
‡M�M�5˜%�.Ô!ñ �V˜B‘Z ‘] bÒ(Ø�
‰
Œñ �V˜B‘Z ‘] bÓ(ô �c‹NœI¤c¨&£kÓ2Ð3€DØò 9‰ˆˆuØ�BŠ;ØˆEØ�‰”I˜eÓ$¤y°Ó'7Ñ7Õ8ð9ô �T‹?ÐrC   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚFDArrayConverterc                 ó   — 	 |j                   }|j                  }|j                  }|j	                  |«       t        ||¬«      }||_        |j                  |_        |j                  |_        |S # t        $ r d }Y Œnw xY wr  )	r€   r  r?   r  r1   rJ  r…   r9   r=   )r>   rÃ   rs   r…   r?   r&   r‹   s          r#   rÇ  zFDArrayConverter._read1  sw   € ð	Ø—_‘_ˆFð �{‰{ˆØ—‘ˆØ�	‰	�%ÔÜ˜t¨FÔ3ˆØˆŒØ Ÿ.™.ˆŒØ$×0Ñ0ˆÔØˆøô ò 	ØŠFð	ús   ‚A/ Á/A=Á<A=c                  ó   — yrã   r£   rÉ  s      r#   r³   zFDArrayConverter.write?  r  rC   c                 ó|   — t        «       }|D ],  }t        |t        «      rŒ|\  }}}|j                  |||«       Œ. |S rE   )rJ  rP   rQ   rƒ   )r>   rV   rˆ   r‰   rÃ   r‹   rŠ   s          r#   r`  zFDArrayConverter.xmlReadB  sH   € Ü“.ˆØò 	2ˆGÜ˜'¤3Ô'ØØ#*Ñ ˆD�%˜Ø�O‰O˜D %¨Õ1ð		2ð
 ˆrC   Nr  r£   rC   r#   r’  r’  0  s   „ òòórC   r’  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚFDSelectConverterc                 óÒ   — |j                   }|j                  |«       |j                  rt        |j	                  «       «      n|j
                  }t        ||j
                  |¬«      }|S )N)rt  )r?   r1   r  rF   rA   rs  rl  )r>   rÃ   rs   r?   rz  r*  s         r#   rÇ  zFDSelectConverter._readM  sV   € Ø�{‰{ˆØ�	‰	�%Ôà/5¯~ª~ŒC�×(Ñ(Ó*Ô+À6×CSÑCSð 	ô ˜D &×"2Ñ"2¸gÔFˆØˆrC   c                  ó   — yrã   r£   rÉ  s      r#   r³   zFDSelectConverter.writeV  r  rC   c                 ó8  — d|j                   fg}t        |j                  «      t        |dt        |j                  «      «      kD  r3|j	                  ddj                  d„ |j                  D «       «      f«       |j                  ||«       |j                  «        y )Nrp  Ú_numCharStringsrr  rä  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrE   )rQ   )r!   rx  s     r#   r$   z-FDSelectConverter.xmlWrite.<locals>.<genexpr>_  s   è ø€ Ò.P¸2¬s°2¯wÑ.Pùs   ‚)rp  rF   rr  r  rd   rö  rw   rx   )r>   r|   rV   rs   rˆ   s        r#   rÍ  zFDSelectConverter.xmlWrite[  sw   € Ø˜EŸL™LÐ)Ð*ˆÜˆu�~‰~Ó¤¨Ð0AÄ3ÀuÇ~Á~ÓCVÓ!WÒWà�L‰L˜* c§h¡hÑ.PÀÇÁÔ.PÓ&PÐQÔRØ×Ñ˜D %Ô(Ø×ÑÕrC   c                 ó´   — t        |d   «      }d }d }t        |||«      }d|v r/|d   j                  «       D �	cg c]  }	t        |	«      ‘Œ c}	|_        |S c c}	w )Nrp  rr  )r   rl  rì  r‡   rr  )
r>   rV   rˆ   r‰   rÃ   rS  r?   rs  r*  rx  s
             r#   r`  zFDSelectConverter.xmlReadc  s`   € Ü�u˜X‘Ó'ˆØˆØˆ	Ü˜D )¨SÓ1ˆØ˜ÑØ38¸Ñ3D×3JÑ3JÓ3LÖ M¨R¤ R¥Ò MˆHÔØˆùò !Ns   ¹ANrÛ  r£   rC   r#   r—  r—  L  s   „ òòò
órC   r—  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚVarStoreConverterc                 óv   — |j                   }|j                  |«       t        |«      }|j                  «        |S rE   )r?   r1   rP  rB   )r>   rÃ   rs   r?   r‡  s        r#   rÇ  zVarStoreConverter._readn  s2   € Ø�{‰{ˆØ�	‰	�%ÔÜ Ó%ˆØ×ÑÔØˆrC   c                  ó   — yrã   r£   rÉ  s      r#   r³   zVarStoreConverter.writeu  r  rC   c                 ó(   — |j                  ||«       y rE   )r]  rÌ  s       r#   rÍ  zVarStoreConverter.xmlWritex  s   € Ø�‰�y $Õ'rC   c                 óB   — t        «       }|j                  ||||«       |S rE   )rP  r`  )r>   rV   rˆ   r‰   rÃ   r‡  s         r#   r`  zVarStoreConverter.xmlRead{  s"   € Ü“>ˆØ×Ñ˜˜u g¨vÔ6ØˆrC   NrÛ  r£   rC   r#   rŸ  rŸ  m  s   „ òòò(órC   rŸ  c                 óv   — d}t        |«      g}| D ]  }|j                  t        |«      «       Œ t        |«      S rã   )r«  rd   r	   )ÚfdSelectArrayrS  r¦   rR   s       r#   ÚpackFDSelect0r¦  �  s=   € Ø
€CÜ�c‹NÐ€DØò &ˆØ�‰”I˜eÓ$Õ%ð&ä�T‹?ÐrC   c                 ó¸  — d}g }t        | «      }d}t        |«      D ]"  }| |   }||k7  sŒ|j                  ||g«       |}Œ$ dz   }t        |«      g}|j                  t	        t        |«      «      «       |D ]<  }	|j                  t	        |	d   «      «       |j                  t        |	d   «      «       Œ> |j                  t	        |«      «       t        |«      S )Nr   r­   r   r   )rF   r  rd   r«  r®  r	   ©
r¥  rS  ÚfdRangesÚlenArrayÚlastFDIndexr5  r.  ÚsentinelGIDr¦   ÚfdRanges
             r#   ÚpackFDSelect3r®  ‰  s×   € Ø
€CØ€HÜ�=Ó!€HØ€KÜ�8‹_ò "ˆØ Ñ"ˆØ˜'Ó!Ø�O‰O˜Q ˜LÔ)Ø!‰Kð	"ð
 �a‘%€Kä�c‹NÐ€DØ‡K�K”
œ3˜x›=Ó)Ô*Øò +ˆØ�‰”J˜w q™zÓ*Ô+Ø�‰”I˜g a™jÓ)Õ*ð+ð 	‡K�K”
˜;Ó'Ô(Ü�T‹?ÐrC   c                 ó¸  — d}g }t        | «      }d}t        |«      D ]"  }| |   }||k7  sŒ|j                  ||g«       |}Œ$ dz   }t        |«      g}|j                  t	        t        |«      «      «       |D ]<  }	|j                  t	        |	d   «      «       |j                  t        |	d   «      «       Œ> |j                  t	        |«      «       t        |«      S )NrZ   r­   r   r   )rF   r  rd   r«  r±  r®  r	   r¨  s
             r#   ÚpackFDSelect4r°  ž  s×   € Ø
€CØ€HÜ�=Ó!€HØ€KÜ�8‹_ò "ˆØ Ñ"ˆØ˜'Ó!Ø�O‰O˜Q ˜LÔ)Ø!‰Kð	"ð
 �a‘%€Kä�c‹NÐ€DØ‡K�K”
œ3˜x›=Ó)Ô*Øò ,ˆØ�‰”J˜w q™zÓ*Ô+Ø�‰”J˜w q™zÓ*Õ+ð,ð 	‡K�K”
˜;Ó'Ô(Ü�T‹?ÐrC   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚFDSelectCompilerc                 ó’  — |j                   }|j                  }|dk(  rt        |«      | _        || _        y |dk(  rt	        |«      | _        || _        y |dk(  rt        |«      | _        || _        y t        |«      }t	        |«      }t        |«      t        |«      k  r|| _        d|_         || _        y || _        d|_         || _        y )Nr   r   rZ   )rp  rr  r¦  r¦   r®  r°  rF   rÃ   )r>   r*  rÃ   rS  r¥  r9  Údata3s          r#   r¨   zFDSelectCompiler.__init__´  sÂ   € Ø�o‰oˆØ ×)Ñ)ˆØ�!Š8Ü% mÓ4ˆDŒIð  ˆ�ð �AŠXÜ% mÓ4ˆDŒIð ˆ�ð �AŠXÜ% mÓ4ˆDŒIð ˆ�ô " -Ó0ˆEÜ! -Ó0ˆEÜ�5‹zœC ›JÒ&Ø!�”	Ø"#�”ð
 ˆ�ð "�”	Ø"#�”àˆ�rC   c                 ó6   — || j                   j                  d<   y )Nrl  rð   rò   s      r#   r¬   zFDSelectCompiler.setPosÊ  rj  rC   c                 ó,   — t        | j                  «      S rE   rb  rG   s    r#   rc   zFDSelectCompiler.getDataLengthÍ  rc  rC   c                 ó:   — |j                  | j                  «       y rE   r=  r>  s     r#   rh   zFDSelectCompiler.toFileÐ  r?  rC   Nr@  r£   rC   r#   r²  r²  ³  s   „ òò,.òórC   r²  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚVarStoreCompilerc                 ó¾   — || _         |j                  «        t        dt        |j                  «      «      }t        |«      |j                  g}t        |«      | _        y rT  )rÃ   rp   ÚminrF   r¦   r®  r	   )r>   ÚvarStoreDatarÃ   ÚvarStoreDataLenr¦   s        r#   r¨   zVarStoreCompiler.__init__Õ  sL   € ØˆŒØ×ÑÔÜ˜f¤c¨,×*;Ñ*;Ó&<Ó=ˆÜ˜?Ó+¨\×->Ñ->Ð?ˆÜ˜d“Oˆ�	rC   c                 ó6   — || j                   j                  d<   y )Nr€   rð   rò   s      r#   r¬   zVarStoreCompiler.setPosÜ  rj  rC   c                 ó,   — t        | j                  «      S rE   rb  rG   s    r#   rc   zVarStoreCompiler.getDataLengthß  rc  rC   c                 ó:   — |j                  | j                  «       y rE   r=  r>  s     r#   rh   zVarStoreCompiler.toFileâ  r?  rC   Nr@  r£   rC   r#   r¹  r¹  Ô  s   „ ò$ò.òórC   r¹  c                   ó   — e Zd Zd„ Zd„ Zy)ÚROSConverterc                 óŠ   — |\  }}}|j                  |dt        |«      fdt        |«      fd|fg«       |j                  «        y ©NÚRegistryÚOrderÚ
SupplementrÙ  )r>   r|   rV   rs   ÚregistryÚorderÚ
supplements          r#   rÍ  zROSConverter.xmlWriteç  sR   € Ø&+Ñ#ˆ�%˜Ø×ÑØàœU 8›_Ð-Øœ% ›,Ð'Ø˜zÐ*ðô	
ð 	×ÑÕrC   c                 ó0   — |d   |d   t        |d   «      fS rÄ  )r   rÐ  s        r#   r`  zROSConverter.xmlReadó  s"   € Ø�jÑ! 5¨¡>´8¸EÀ,Ñ<OÓ3PÐQÐQrC   Nrý  r£   rC   r#   rÂ  rÂ  æ  s   „ ò
óRrC   rÂ  )é   ÚmaxstackÚnumberNN)é   é   r"  )rY  rY  rÎ  ))rÏ  é   ÚSyntheticBaserÎ  NN)r   ÚversionrY  NNrâ  rY  )rÏ  r   rã  r   ÚFullName)rÏ  é&   ÚFontNamer   Ú
FamilyName)rZ   ÚWeightrY  NN))rÏ  r   ÚisFixedPitchrÎ  r   N))rÏ  r   ÚItalicAnglerÎ  r   N))rÏ  r   ÚUnderlinePositionrÎ  iœÿÿÿN))rÏ  rZ   ÚUnderlineThicknessrÎ  é2   N))rÏ  rY   Ú	PaintTyperÎ  r   N))rÏ  é   ÚCharstringTyperÎ  r   N)rÏ  é   Ú
FontMatrixrn  )çü©ñÒMbP?r   r   rã  r   r   )é   ÚUniqueIDrÎ  NNrY   ÚFontBBox)r   r   r   r   ))rÏ  é   ÚStrokeWidthrÎ  r   N)é   ÚXUIDrn  NN))rÏ  é   Ú
PostScriptrY  NN))rÏ  é   ÚBaseFontNamerY  NN))rÏ  é   ÚBaseFontBlendÚdeltaNN))rÏ  é   ÚCIDFontVersionrÎ  r   N))rÏ  é    ÚCIDFontRevisionrÎ  r   N))rÏ  é!   ÚCIDFontTyperÎ  r   N))rÏ  é"   ÚCIDCountrÎ  i"  Né   r\   rÎ  ))rÏ  é#   ÚUIDBaserÎ  NNé   ri  é   r�   )rÎ  rÎ  )rÏ  é%   )rÏ  é$   r„   é   é   r€   Úblendrï  )rí  ÚvsindexrÎ  NNrî  )rß  Ú
BlueValuesrñ  NN)rá  Ú
OtherBluesrñ  NN)rç  ÚFamilyBluesrñ  NN)é	   ÚFamilyOtherBluesrñ  NN))rÏ  r  Ú	BlueScalerÎ  g}?5^ºI¤?N))rÏ  é
   Ú	BlueShiftrÎ  rá  N))rÏ  é   ÚBlueFuzzrÎ  r   N)r  ÚStdHWrÎ  NN)r  ÚStdVWrÎ  NN))rÏ  rÏ  Ú	StemSnapHrñ  NN))rÏ  rä  Ú	StemSnapVrñ  NN))rÏ  ré  Ú	ForceBoldrÎ  r   N))rÏ  rú  ÚForceBoldThresholdrÎ  NN))rÏ  rý  ÚlenIVrÎ  NN))rÏ  r  ÚLanguageGrouprÎ  r   N))rÏ  rþ  ÚExpansionFactorrÎ  g¸…ëQ¸®?N))rÏ  é   ÚinitialRandomSeedrÎ  r   N)rÑ  ÚdefaultWidthXrÎ  r   N)rë  ÚnominalWidthXrÎ  r   Nr  r   c                 óØ   — t        t        | «      «      D ]S  }| |   \  }}}}}|�Œ|dv rt        «       }n*|dk(  rt        «       }n|dk(  rt	        «       }n
|dk(  rd }nJ ‚|||||f| |<   ŒU y )N)rñ  rn  rÎ  rY  rî  )r  rF   rÿ  rò  rÒ  )rª   r5  rµ  rV   r¶  r·  r¸  s          r#   ÚaddConvertersr  j  sŒ   € Ü”3�u“:Óò 0ˆØ',¨Q¡xÑ$ˆˆD�#�w ØÐØØÐ$Ñ$Ü!Ó#‰DØ�HŠ_Ü"Ó$‰DØ�EŠ\Ü!Ó#‰DØ�KÒØ‰Dà�5Ø�t˜S '¨4Ð/ˆˆaŠñ0rC   c                   ó   — e Zd Z ee«      Zy)ÚTopDictDecompilerN)rŸ   r    r¡   r¹  ÚtopDictOperatorsÚ	operatorsr£   rC   r#   r  r  €  s   „ Ù!Ð"2Ó3�IrC   r  c                   ó   — e Zd Z ee«      Zy)ÚPrivateDictDecompilerN)rŸ   r    r¡   r¹  ÚprivateDictOperatorsr!  r£   rC   r#   r#  r#  „  s   „ Ù!Ð"6Ó7�IrC   r#  c                   óP   — e 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d„Zy)ÚDictCompilerr   Nc                 ó~  — |rt        |t        «      sJ ‚|€t        |d«      r|j                  }|€J ‚|| _        || _        || _        || _        i }|j                  D ]W  }t        ||d «      }|€Œ|j                  |   }|j                  ||«      }||j                  j                  |«      k(  rŒS|||<   ŒY || _        y rÀ   )rP   r8   rO   r&   r6  r9   rÃ   rÉ  r  Ú
convertersr³   Údefaultsrû  rñ   )	r>   r6  r9   rÃ   r&   rñ   rV   rs   r¸  s	            r#   r¨   zDictCompiler.__init__‹  sÐ   € ÙÜ˜g¤~Ô6Ð6Ð6Øˆ>œg f¨hÔ7Ø—]‘]ˆFØÐ%Ð%Ð%ØˆŒØˆŒØˆŒØˆŒØˆØ—M‘Mò 	"ˆDÜ˜G T¨4Ó0ˆEØˆ}ØØ×%Ñ% dÑ+ˆDØ—J‘J˜w¨Ó.ˆEØ˜×(Ñ(×,Ñ,¨TÓ2Ò2ØØ!ˆG�DŠMð	"ð ˆ�rC   c                  ó   — y rE   r£   rò   s      r#   r¬   zDictCompiler.setPos¡  r1  rC   c                 ó6   — t        | j                  d«      «      S )Nrc   )rF   rp   rG   s    r#   rc   zDictCompiler.getDataLength¤  s   € Ü�4—<‘< Ó0Ó1Ð1rC   c                 ój  — t         j                  t        d| j                  j                  |«       | j                  }g }| j
                  j                  D ]Ð  }|j                  |«      }|€Œ| j                  |   \  }}t        |t        «      rat        |«      }t        |«      |k(  sJ d«       ‚t        |«      D ]2  }	||	   }
||	   }t        | d|
z   «      }|j                   ||«      «       Œ4 n&t        | d|z   «      }|j                   ||«      «       |j                  |«       ŒÒ t        |«      }|S )Nz-- compiling %s for %szvalue doesn't match arg typeÚarg_)r®   r¯   rå   rŸ   rñ   r6  rÉ  rû  ÚopcodesrP   r_  rF   r  r  rd   r	   )r>   Úreasonrñ   r¦   rV   rs   rµ  ÚargTyper¾  r5  r¶  ÚvÚ
arghandlers                r#   rp   zDictCompiler.compile§  s  € Ü�‰”Ð/°·±×1HÑ1HÈ&ÔQØ—,‘,ˆØˆØ—L‘L×&Ñ&ò 	ˆDØ—K‘K Ó%ˆEØˆ}ØØŸ,™, tÑ,‰KˆB�Ü˜'¤5Ô)Ü˜“L�Ü˜5“z Q’ÐFÐ(FÓF�Ü˜q›ò /�AØ! !™*�CØ˜a™�AÜ!(¨¨v¸©|Ó!<�JØ—K‘K¡
¨1£Õ.ñ	/ô % T¨6°GÑ+;Ó<�
Ø—‘™J uÓ-Ô.Ø�K‰K˜�Oð!	ô" ˜‹ˆØˆrC   c                 óH   — | j                  d«      }|j                  |«       y )Nrh   )rp   r³   )r>   r?   r¦   s      r#   rh   zDictCompiler.toFile¿  s   € Ø�|‰|˜HÓ%ˆØ�
‰
�4ÕrC   c                 ó   — t        |t        «      r]|D �cg c]  }t        |«      ‘Œ }}|j                  t        d«      «       |j                  t	        t
        «      «       t        |«      }|S t        |«      }|S c c}w r  )rP   r3   ÚencodeNumberrd   r   ÚblendOpr	   )r>   Únumrï  r¦   Údatums        r#   Ú
arg_numberzDictCompiler.arg_numberÃ  sk   € Ü�cœ4Ô Ø14Ö5¨#”L Õ%Ð5ˆDÐ5Ø�K‰Kœ Q›Ô(Ø�K‰Kœ¤Ó(Ô)Ü˜d“OˆEð ˆô ! Ó%ˆEØˆùò 6s   •A;c                 ó^   — t        j                  | j                  j                  |«      «      S rE   )r   ÚencodeIntCFFr9   rP  )r>   r"   s     r#   Úarg_SIDzDictCompiler.arg_SIDÍ  s"   € Ü×)Ñ)¨$¯,©,×*=Ñ*=¸aÓ*@ÓAÐArC   c                 ój   — g }|D ]"  }|j                  | j                  |«      «       Œ$ t        |«      S rE   )rd   r9  r	   )r>   rs   r¦   r7  s       r#   Ú	arg_arrayzDictCompiler.arg_arrayÐ  s5   € ØˆØò 	.ˆCØ�K‰K˜Ÿ™¨Ó,Õ-ð	.ä˜‹ÐrC   c                 ó  — |sy|d   }t        |t        «      r| j                  |«      }t        |«      S g }d}|D ]  }|j                  ||z
  «       |}Œ g }|D ]  }|j                  t	        |«      «       Œ t        |«      S )NrC   r   )rP   r3   Úarg_delta_blendrd   r5  r	   )r>   rs   Úval0r¦   rÝ   Úlastr1  r7  s           r#   Ú	arg_deltazDictCompiler.arg_deltaÖ  s˜   € ÙØØ�Q‰xˆÜ�dœDÔ!Ø×'Ñ'¨Ó.ˆDô ˜‹Ðð ˆCØˆDØò �Ø—
‘
˜1˜t™8Ô$Ø‘ðð ˆDØò /�Ø—‘œL¨Ó-Õ.ð/ä˜‹ÐrC   c                 ó¼  — t        |d   «      }t        |«      }|||z  z   dz   }|| j                  kD  r~g }	 |s	 |S | j                  |z
  dz
  |z  }|dk  rt        d«      ‚t        t        |«      |«      }	|d|	 }
| j	                  |
||«      }|j                  |«       |
d   d   }||	z  }||	d }Œ{dg|z  }dg|z  }d}||k  r(||   d   }||z
  ||<   |}||   dd ||<   |dz  }||k  rŒ(|}|D ]  }|j                  |«       Œ |D �cg c]  }t        |«      ‘Œ }}|j                  t        |«      «       |j                  t        t        «      «       |S c c}w )aM  A delta list with blend lists has to be *all* blend lists.

        The value is a list is arranged as follows::

                [
                        [V0, d0..dn]
                        [V1, d0..dn]
                        ...
                        [Vm, d0..dn]
                ]

        ``V`` is the absolute coordinate value from the default font, and ``d0-dn``
        are the delta values from the *n* regions. Each ``V`` is an absolute
        coordinate from the default font.

        We want to return a list::

                [
                        [v0, v1..vm]
                        [d0..dn]
                        ...
                        [d0..dn]
                        numBlends
                        blendOp
                ]

        where each ``v`` is relative to the previous default font value.
        r   r   z)CFF2 blend does not fit the operand stackNr­   )
rF   ÚmaxBlendStackr.   r»  r@  rá   r5  rd   r   r6  )r>   rs   ÚprevValÚ
stackDepthÚ
numMastersÚ	numBlendsÚnumStackrÝ   ÚnumBlendValuesÚnumValÚvalListÚout1Ú	firstListÚ	deltaListr5  ÚdefaultValueÚrelValueListrî  rï  s                      r#   r@  zDictCompiler.arg_delta_blendç  sº  € ô: ˜˜q™“]ˆ
Ü˜“Jˆ	Ø ¨ZÑ!7Ñ8¸1Ñ<ˆØ�d×(Ñ(Ò(ð ˆCØÙØð@ ˆ
ð? #'×"4Ñ"4°zÑ"AÀAÑ"EÈ*Ñ!T�Ø! QÒ&Ü$Ð%PÓQÐQÜœS ›Z¨Ó8�Ø  ˜.�Ø×+Ñ+¨G°W¸jÓI�Ø—
‘
˜4Ô Ø! "™+ a™.�Ø˜fÑ$�
Ø˜f˜g˜�ð ð ˜˜i™ˆIØ˜ Ñ*ˆIØˆAØ�i’-ð
  % Q™x¨™{�Ø+¨gÑ5�	˜!‘Ø&�Ø$ Q™x¨¨˜|�	˜!‘Ø�Q‘�ð �i“-ð %ˆLØ&ò /�	Ø×#Ñ# IÕ.ð/à0<Ö=¨”< Õ$Ð=ˆCÐ=Ø�J‰J”| IÓ.Ô/Ø�J‰J”wœwÓ'Ô(Øˆ
ùò >s   ÄErE   r  )rŸ   r    r¡   rE  r¨   r¬   rc   rp   rh   r9  r<  r>  rC  r@  r£   rC   r#   r&  r&  ˆ  s;   „ Ø€Móò,ò2òò0òòBòòô"GrC   r&  c                 óv   — t        | t        «      rt        j                  | «      S t        j                  | «      S rE   )rP   ré  r   ÚencodeFloatr;  )r7  s    r#   r5  r5  1	  s.   € Ü�#”uÔÜ×(Ñ(¨Ó-Ð-ä×)Ñ)¨#Ó.Ð.rC   c                   ó"   — e Zd Z ee«      Zd„ Zy)ÚTopDictCompilerc                 óÚ  — | j                   }g }| j                  j                  �€t        | j                  d«      r�| j                  j                  rzt        | j                  d«      rd }nt        | j                  j                  «      }|€1|j                  t        || j                  j                  | «      «       n|| j                  d<   t        | j                  d«      r¢| j                  j                  rŒ| j                  j                  }t        |t        «      sf|j                  t        ||| «      «       nIt        | j                  d«      r3| j                  j                  }t        || «      }|j                  |«       t        | j                  d«      rú| j                  j                  }t!        |«      dk(  rO| j                  j"                  }	| j                  j                  D ]   }
|j                  |	|
   j$                  «       Œ" |rht!        |«      t!        | j                  j"                  «      kD  r=|j&                  dvr/t!        |«      dkD  st)        |j*                  «      d	kD  rd
nd|_        t-        || «      }|j                  |«       t        | j                  d«      rgg }| j                  j"                  }	| j                  j                  D ]  }
|j                  |	|
   «       Œ t/        ||| |¬«      }|j                  |«       t        | j                  d«      rW| j                  j0                  j3                  || «      }|j                  |«       |j5                  |j7                  |«      «       t        | j                  d«      rW| j                  j8                  j3                  || «      }|j                  |«       |j5                  |j7                  |«      «       |S )Nr\   r"  ri  r€   rl  r   ro  rU  rV  rZ   r   re   r%   r„   r�   )r&   r6  rA   rO   r\   rK  rd   r3  rñ   ri  rP   rQ   rc  r€   r¹  rl  rF   re   r”  rp  Úmaxrr  r²  r  r„   r`   rá   rg   r�   )r>   r9   r&   rn   ÚcharsetCoder   r¼  ÚvarStoreCompr*  r‰  rV   ÚfdSelectComprÂ   ÚcharStringsCompÚfdArrayIndexCompÚprivComps                   r#   rg   zTopDictCompiler.getChildren;	  s  € Ø—‘ˆØˆØ�<‰<×)Ñ)Ñ1Ü�t—|‘| YÔ/°D·L±L×4HÒ4HÜ˜4Ÿ<™<¨Ô/Ø"&‘Kä"/°·±×0DÑ0DÓ"E�KØÐ&Ø—O‘OÜ'¨°·±×1EÑ1EÀtÓLõð /:�D—L‘L Ñ+Ü�t—|‘| ZÔ0°T·\±\×5JÒ5JØŸ<™<×0Ñ0�Ü! (¬CÔ0Ø—O‘OÔ$4°W¸hÈÓ$MÕNä�t—|‘| ZÔ0Ø#Ÿ|™|×4Ñ4�Ü/°¸dÓC�Ø—‘ Ô-Ü�4—<‘< Ô,ð
 —|‘|×,Ñ,ˆHä�8‹} Ò!Ø"Ÿl™l×6Ñ6�Ø ŸL™L×0Ñ0ò E�DØ—O‘O K°Ñ$5×$CÑ$CÕDðEáœ#˜h›-¬#¨d¯l©l×.FÑ.FÓ*GÒGð —?‘?¨&Ñ0ô ˜x›=¨6Ò1´S¸×9JÑ9JÓ5KÈdÒ5Rñ àð ”Oô
 ,¨H°dÓ;ˆLØ�O‰O˜LÔ)Ü�4—<‘< Ô/ØˆEØŸ,™,×2Ñ2ˆKØŸ™×,Ñ,ò 0�Ø—‘˜[¨Ñ.Õ/ð0ä1°%¸À$ÈvÔVˆOØ�O‰O˜OÔ,Ü�4—<‘< Ô+ð  $Ÿ|™|×3Ñ3×?Ñ?ÀÈÓNÐØ�O‰OÐ,Ô-Ø�O‰OÐ,×8Ñ8¸ÓAÔBÜ�4—<‘< Ô+Ø—|‘|×+Ñ+×7Ñ7¸ÀÓFˆHØ�O‰O˜HÔ%Ø�O‰O˜H×0Ñ0°Ó9Ô:ØˆrC   N)rŸ   r    r¡   r¼  r   r.  rg   r£   rC   r#   rV  rV  8	  s   „ ÙÐ.Ó/€Gó@rC   rV  c                   ó6   ‡ — e Zd Z ee«      Zdˆ fd„	Zd„ Zˆ xZS )ÚFontDictCompilerc                 ó(  •— t         t        | �  ||||¬«       g }| j                  }t	        t        |j                  «      t        |j                  «      z
  «      D ]‚  }||j                  v r|j                  |«       Œ#|j                  j                  |«      }|�!|j                  |   }|j                  ||«      }t        ||d «      |k7  sŒr|j                  |«       Œ„ |r1t        j                  ddj!                  t	        |«      «      z   «       y y )Nr%   z:Some CFF FDArray/FontDict keys were ignored upon compile: rä  )rä   r`  r¨   r6  r–  rf   r(  rÉ  rñ   rd   r)  rû  r,   r  r®   Úwarningrö  )
r>   r6  r9   rÃ   r&   ÚignoredNamesrV   r·  r¸  rå   s
            €r#   r¨   zFontDictCompiler.__init__�	  s  ø€ ÜÔ Ñ.¨w¸ÀÐPVÐ.ÔWð ˆØ—,‘,ˆÜœ3˜w×1Ñ1Ó2´S¸¿¹Ó5GÑGÓHò 	.ˆDØ�w—‘Ñ&ð
 ×#Ñ# DÕ)ð "×*Ñ*×.Ñ.¨tÓ4�ØÐ&Ø"×-Ñ-¨dÑ3�DØ"Ÿi™i¨°Ó9�GÜ˜7 D¨$Ó/°7Ó:Ø ×'Ñ'¨Õ-ð#	.ñ$ Ü�K‰KØLØ—(‘(œ6 ,Ó/Ó0ñ1õð rC   c                 óä   — g }t        | j                  d«      rW| j                  j                  j                  || «      }|j	                  |«       |j                  |j                  |«      «       |S ©Nr�   )rO   r6  r�   r`   rd   rá   rg   )r>   r9   rn   r^  s       r#   rg   zFontDictCompiler.getChildren¢	  sY   € ØˆÜ�4—<‘< Ô+Ø—|‘|×+Ñ+×7Ñ7¸ÀÓFˆHØ�O‰O˜HÔ%Ø�O‰O˜H×0Ñ0°Ó9Ô:ØˆrC   rE   )	rŸ   r    r¡   r¼  r   r.  r¨   rg   rè   ré   s   @r#   r`  r`  ~	  s   ø„ ÙÐ.Ó/€GõöBrC   r`  c                   ó,   — e Zd ZeZ ee«      Zd„ Zd„ Z	y)ÚPrivateDictCompilerc                 óR   — ||z
  }||f| j                   j                  d<   || _        y re  )rÃ   rñ   rµ   )r>   rµ   r¸   r  s       r#   r¬   zPrivateDictCompiler.setPos¯	  s*   € Ø˜‰|ˆØ)-¨s¨ˆ�‰×Ñ˜IÑ&Øˆ�rC   c                 ó    — g }t        | j                  d«      r5|j                  | j                  j                  j	                  || «      «       |S rÿ   )rO   r6  rd   r   r`   )r>   r9   rn   s      r#   rg   zPrivateDictCompiler.getChildren´	  s=   € ØˆÜ�4—<‘< Ô)Ø�O‰O˜DŸL™L×.Ñ.×:Ñ:¸7ÀDÓIÔJØˆrC   N)
rŸ   r    r¡   ÚmaxStackLimitrE  r¼  r$  r.  r¬   rg   r£   rC   r#   rg  rg  «	  s   „ Ø!€MÙÐ2Ó3€Gòó
rC   rg  c                   óL   ‡ — e Zd Zd	d„Zd„ Zd„ Zd
d„Zd„ Zˆ fd„Zd„ Z	d„ Z
ˆ xZS )ÚBaseDictc                 óÚ   — |d u |d u k(  sJ ‚i | _         g | _        || _        |€y || _        || _        |�8t
        j                  t        d| j                  j                  |«       || _	        y y )Nr  )
rñ   Ú	skipNamesr9   r  r?   r®   r¯   rå   rŸ   rÓ   )r>   r9   r?   rÓ   r&   s        r#   r¨   zBaseDict.__init__¼	  sr   € Ø˜$� D¨D LÒ1Ð1Ð1ØˆŒØˆŒØˆŒØˆ<ØØˆŒØˆŒ	ØÐÜ�G‰G”EÐ-¨t¯~©~×/FÑ/FÈÔOØ ˆD�Kð rC   c                 ó  — t         j                  t        d| j                  j                  t	        |«      «       | j                  | j                  | «      }|j                  |«       |j                  «       | _	        | j                  «        y )Nz    length %s is %d)r®   r¯   rå   rŸ   rF   ÚdecompilerClassr9   rB   ÚgetDictrñ   ÚpostDecompile)r>   r¦   Údecs      r#   rB   zBaseDict.decompileÉ	  s^   € Ü�‰”Ð,¨d¯n©n×.EÑ.EÄsÈ4ÃyÔQØ×"Ñ" 4§<¡<°Ó6ˆØ�‰�dÔØ—{‘{“}ˆŒØ×ÑÕrC   c                  ó   — y rE   r£   rG   s    r#   rr  zBaseDict.postDecompileÐ	  r1  rC   c                 ó,   — | j                  | |||¬«      S r  r  r!  s       r#   r`   zBaseDict.getCompilerÓ	  r"  rC   c                 ó(  — |d d |dd  cxk(  rdk(  rt        |«      ‚ | j                  j                  |d «      }|€| j                  j                  |«      }|€t        |«      ‚| j                  |   }|j                  | |«      }t        | ||«       |S )Nr   éþÿÿÿÚ__)r  rñ   rû  r)  r(  r,   Úsetattr)r>   rV   rs   r¸  s       r#   Ú__getattr__zBaseDict.__getattr__Ö	  s�   € Ø��ˆ8�t˜B˜C�yÔ( DÒ(ô
 ! Ó&Ð&ð )ð —‘× Ñ   tÓ,ˆØˆ=Ø—M‘M×%Ñ% dÓ+ˆEØˆ=Ü  Ó&Ð&Ø�‰˜tÑ$ˆØ—	‘	˜$ Ó&ˆÜ��d˜EÔ"ØˆrC   c                 ó‚   •— | j                   j                  |d «      d u}|| j                  v s|st        ‰| �  |«       y y rE   )rñ   r�  Ú__dict__rä   Ú__delattr__)r>   rV   Ú	inRawDictrå   s      €r#   r}  zBaseDict.__delattr__ç	  s@   ø€ ð —L‘L×$Ñ$ T¨4Ó0¸Ð<ˆ	Ø�4—=‘=Ñ ©	Ü‰GÑ Õ%ð )2rC   c                 ó†  — | j                   D ]H  }|| j                  v rŒt        | |d «      }|€|dk7  rŒ'| j                  |   }|j	                  |||«       ŒJ t        | j                  «      t        | j                   «      z
  }|r=|j                  ddj                  t        |«      «      z  «       |j                  «        y y )Nr\   zsome keys were ignored: %srä  )rÉ  rn  r  r(  rÍ  rf   rñ   r3  rö  r–  rx   )r>   r|   rV   rs   r¸  rc  s         r#   rz   zBaseDict.toXMLî	  s¸   € Ø—J‘Jò 	2ˆDØ�t—~‘~Ñ%ØÜ˜D $¨Ó-ˆEð ˆ} ¨Ò!2ØØ—?‘? 4Ñ(ˆDØ�M‰M˜) T¨5Õ1ð!	2ô" ˜4Ÿ<™<Ó(¬3¨t¯z©z«?Ñ:ˆÙØ×ÑØ,¨s¯x©x¼¸|Ó8LÓ/MÑMôð ×ÑÕð	 rC   c                 ód   — | j                   |   }|j                  |||| «      }t        | ||«       y rE   )r(  r`  ry  )r>   rV   rˆ   r‰   r¸  rs   s         r#   rƒ   zBaseDict.fromXML
  s0   € Ø�‰˜tÑ$ˆØ—‘˜T 5¨'°4Ó8ˆÜ��d˜EÕ"rC   r„  rE   )rŸ   r    r¡   r¨   rB   rr  r`   rz  r}  rz   rƒ   rè   ré   s   @r#   rl  rl  »	  s,   ø„ ó!òòóHòô"&ò ö2#rC   rl  c                   ó†   ‡ — e Zd ZdZ ee«      Z ee«      Ze	Z
 ee«      ZeZ	 	 	 	 	 	 dˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )	r‚   ad  The ``TopDict`` represents the top-level dictionary holding font
    information. CFF2 tables contain a restricted set of top-level entries
    as described `here <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#7-top-dict-data>`_,
    but CFF tables may contain a wider range of information. This information
    can be accessed through attributes or through the dictionary returned
    through the ``rawDict`` property:

    .. code:: python

            font = tt["CFF "].cff[0]
            font.FamilyName
            # 'Linux Libertine O'
            font.rawDict["FamilyName"]
            # 'Linux Libertine O'

    More information is available in the CFF file's private dictionary, accessed
    via the ``Private`` property:

    .. code:: python

            tt["CFF "].cff[0].Private.BlueValues
            # [-15, 0, 515, 515, 666, 666]

    c                 ó  •— t         t        | �  ||||¬«       || _        || _        |r5t        t        «      | _         |«       | _        t        t        «      | _
        y t        t        «      | _        t        t        «      | _
        y r  )rä   r‚   r¨   rA   r=   rÁ  ÚtopDictOperators2r)  r\   r¿  rÉ  r   )r>   r9   r?   rÓ   r=   rA   r&   rå   s          €r#   r¨   zTopDict.__init__-
  sn   ø€ ô 	Œg�tÑ% g¨t°VÀFÐ%ÔKØ!2ˆÔØ&ˆÔÙÜ)Ô*;Ó<ˆDŒMÙ,Ó.ˆDŒLÜ#Ô$5Ó6ˆD�Jä)Ô*:Ó;ˆDŒMÜ#Ô$4Ó5ˆD�JrC   c                 ó   — | j                   S )z.Returns a list of glyph names in the CFF font.)r\   rG   s    r#   r;   zTopDict.getGlyphOrderA
  ó   € à�|‰|ÐrC   c                 óŽ  — | j                   j                  d«      }|€y | j                  j                  |«       | j                  rft        | j                  «      | _        | j                  t        | j                  «      kD  rt        d«      ‚| j                  d | j                   | _        y t        | j                  «      | _        y )Nre   z3CFF2 CharStrings count exceeds the font glyph count)rñ   rû  r?   r1   r  r  rs  rF   r\   r.   r  )r>   rÓ   s     r#   rr  zTopDict.postDecompileE
  s�   € Ø—‘×!Ñ! -Ó0ˆØˆ>Øà�	‰	�‰�vÔØ�<Š<Ü'¨¯	©	Ó2ˆDŒNØ�~‰~¤ D§L¡LÓ 1Ò1Ü Ð!VÓWÐWàŸ<™<Ð(8¨$¯.©.Ð9ˆD�Lä'¨¯	©	Ó2ˆD�NrC   c                 ó2  — t        | d«      r@| j                  «        t        | d«      r$t        | j                  «      | j                  _        t        | d«      rdg| _        t        | d«      rt        | d«      s	g d¢| _        t        j                  | |«       y )Nre   rl  r"  ri  )ró  rõ  r÷  rù  )	rO   ÚdecompileAllCharStringsrF   re   rl  r›  rn  rl  rz   )r>   r|   s     r#   rz   zTopDict.toXMLT
  sx   € Ü�4˜Ô'Ø×(Ñ(Ô*Ü�t˜ZÔ(Ü03°D×4DÑ4DÓ0E�—‘Ô-Ü�4˜ÔØ(˜\ˆDŒNÜ�t˜UÔ#¬7°4¸Ô+GòˆDŒNô 	�‰�t˜YÕ'rC   c                 ó´   — t        | j                  j                  «       «      D ]  \  }}	 |j                  «        Œ y #  t        j                  d|«       ‚ xY w)NzError in charstring %s)Ú	enumeratere   rL   rB   r®   Úerror)r>   r5  r‘  s      r#   rˆ  zTopDict.decompileAllCharStringsf
  sS   € ä& t×'7Ñ'7×'>Ñ'>Ó'@ÓAò 	‰MˆAˆzðØ×$Ñ$Õ&ñ	øðÜ—	‘	Ð2°AÔ6Øús	   «>¾Ac                 ó
  — d }| j                   j                  «       D ]1  }|j                  | j                   «      }|€Œ!|�t        ||«      }Œ0|}Œ3 |€| j                  d   d d  | _        y t        t        |«      «      | _        y )Nræ  )re   rL   Ú
calcBoundsr   r)  ræ  r3   r   )r>   ÚfontBBoxr‘  Úboundss       r#   r^   zTopDict.recalcFontBBoxo
  s†   € ØˆØ×*Ñ*×1Ñ1Ó3ò 	&ˆJØ×*Ñ*¨4×+;Ñ+;Ó<ˆFØÑ!ØÐ'Ü(¨°6Ó:‘Hà%‘Hð	&ð ÐØ ŸM™M¨*Ñ5±aÐ8ˆD�Mä ¤¨Ó!2Ó3ˆD�MrC   r:  )rŸ   r    r¡   r¢   rÁ  r   r)  rÃ  r(  rV  r   r¿  rÉ  r  rp  r¨   r;   rr  rz   rˆ  r^   rè   ré   s   @r#   r‚   r‚   
  sg   ø„ ññ2 Ð-Ó.€HÙ Ð!1Ó2€JØ#€MÙÐ'Ó(€EØ'€Oð ØØØØØõ6ò(ò3ò(ò$ö4rC   r‚   c                   ó\   ‡ — e Zd Zi Z ee«      ZeZg d¢Z	dgZ
eZ	 	 	 	 	 	 dˆ fd„	Zd„ Zˆ xZS )rE  )rÖ  râ  rØ  r�   r�   c                 ód   •— t         t        | �  ||||¬«       || _        | j	                  |«       y r  )rä   rE  r¨   r…   ÚsetCFF2)r>   r9   r?   rÓ   r=   r&   r…   rå   s          €r#   r¨   zFontDict.__init__¢
  s0   ø€ ô 	Œh˜Ñ& w°°fÀVÐ&ÔLØˆŒØ�‰�VÕrC   c                 ój   — |r| j                   | _        d| _        y | j                  | _        d| _        y )NTF)Ú	orderCFF2rÉ  r  ÚorderCFFr§   s     r#   r’  zFontDict.setCFF2¯
  s)   € áØŸ™ˆDŒJØˆD�LàŸ™ˆDŒJØ ˆD�LrC   r:  )rŸ   r    r¡   r)  rÃ  r   r(  r`  r   r•  r”  r  rp  r¨   r’  rè   ré   s   @r#   rE  rE  
  sI   ø„ ð8 €HÙ Ð!1Ó2€JØ$€MÚ>€HØ�€IØ'€Oð ØØØØØõö!rC   rE  c                   óp   ‡ — e Zd Z ee«      Z ee«      Z ee«      Z	e
ZeZdˆ fd„	Zed„ «       Zdd„Zˆ xZS )r  c                 ó   •— t         t        | �  ||||¬«       || _        |r>t	        t
        «      | _        t        t
        «      | _        d x| _	        | _
        d| _        y t	        t        «      | _        t        t        «      | _        d| _        y )Nr%   TF)rä   r  r¨   r…   rÁ  ÚprivateDictOperators2r)  r¿  rÉ  r  r  r  r$  )r>   r9   r?   rÓ   r&   r…   rå   s         €r#   r¨   zPrivateDict.__init__À
  sy   ø€ ÜŒk˜4Ñ)¨'°4¸ÈÐ)ÔOØˆŒÙÜ)Ô*?Ó@ˆDŒMÜ#Ô$9Ó:ˆDŒJð 7;Ð:ˆDÔ Ô!3ØˆD�Lä)Ô*>Ó?ˆDŒMÜ#Ô$8Ó9ˆDŒJØ ˆD�LrC   c                 ó   — | j                   S rE   )r  rG   s    r#   Úin_cff2zPrivateDict.in_cff2Ï
  r…  rC   c                 óv   — |€t        | d«      r| j                  }nd}| j                  j                  |«      }|S )Nr  r   )rO   r  r…   rj  )r>   Úviri  s      r#   rj  zPrivateDict.getNumRegionsÓ
  s9   € àˆ:Ü�t˜YÔ'Ø—\‘\‘à�Ø—[‘[×.Ñ.¨rÓ2ˆ
ØÐrC   )NNNNNrE   )rŸ   r    r¡   rÁ  r$  r)  rÃ  r(  r¿  rÉ  r#  rp  rg  r   r¨   Úpropertyrš  rj  rè   ré   s   @r#   r  r  ¹
  sL   ø„ ÙÐ1Ó2€HÙ Ð!5Ó6€JÙÐ+Ó,€EØ+€OØ'€Mõ!ð ñó ð÷rC   r  c                   ó<   — e Zd ZdZd
d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
y)r8   zSID -> string mapping.Nc                 ó~   — |€
g }|| _        y t        |d¬«      D �cg c]  }t        |d¬«      ‘Œ }}|| _        y c c}w )NFr%   r   r   )r4   r   r9   )r>   r?   r9   r"   s       r#   r¨   zIndexedStrings.__init__á
  sF   € Øˆ<ØˆGð ˆ�ô =BÀ$ÈuÔ<UÖV°q”u˜Q¨Ö2ÐVˆGÐVØˆ�ùò Ws   œ:c                 ó    — t        | d | d¬«      S )NFr%   )rÖ   rG   s    r#   r`   zIndexedStrings.getCompilerè
  s   € Ü% d¨D°$¸uÔEÐErC   c                 ó,   — t        | j                  «      S rE   )rF   r9   rG   s    r#   rH   zIndexedStrings.__len__ë
  s   € Ü�4—<‘<Ó Ð rC   c                 óR   — |t         k  r	t        |   S | j                  |t         z
     S rE   )ÚcffStandardStringCountÚcffStandardStringsr9   )r>   rY  s     r#   rW   zIndexedStrings.__getitem__î
  s+   € ØÔ'Ò'Ü% cÑ*Ð*à—<‘< Ô&<Ñ <Ñ=Ð=rC   c                 óH  — t        | d«      s| j                  «        t        |d¬«      }|t        v rt        |   }|S || j                  v r| j                  |   }|S t        | j                  «      t        z   }| j                  j                  |«       || j                  |<   |S )NÚstringMappingr   r   )	rO   ÚbuildStringMappingr   ÚcffStandardStringMappingr¦  rF   r9   r£  rd   )r>   r"   rY  s      r#   rP  zIndexedStrings.getSIDô
  s¢   € Ü�t˜_Ô-Ø×#Ñ#Ô%Ü�!˜hÔ'ˆØÔ(Ñ(Ü*¨1Ñ-ˆCð ˆ
ð �$×$Ñ$Ñ$Ø×$Ñ$ QÑ'ˆCð
 ˆ
ô �d—l‘lÓ#Ô&<Ñ<ˆCØ�L‰L×Ñ Ô"Ø$'ˆD×Ñ˜qÑ!Øˆ
rC   c                 ó   — | j                   S rE   rØ   rG   s    r#   Ú
getStringszIndexedStrings.getStrings  s   € Ø�|‰|ÐrC   c                 óž   — i | _         t        t        | j                  «      «      D ]%  }|t        z   | j                   | j                  |   <   Œ' y rE   )r¦  r  rF   r9   r£  r€  s     r#   r§  z!IndexedStrings.buildStringMapping  sH   € ØˆÔÜœ3˜tŸ|™|Ó,Ó-ò 	UˆEØ6;Ô>TÑ6TˆD×Ñ˜tŸ|™|¨EÑ2Ò3ñ	UrC   rE   )rŸ   r    r¡   r¢   r¨   r`   rH   rW   rP  rª  r§  r£   rC   r#   r8   r8   Þ
  s*   „ Ù óòFò!ò>òòóUrC   r8   (‡  r5  ÚspaceÚexclamÚquotedblÚ
numbersignÚdollarÚpercentÚ	ampersandÚ
quoterightÚ	parenleftÚ
parenrightÚasteriskÚplusÚcommaÚhyphenÚperiodÚslashÚzeroÚoneÚtwoÚthreeÚfourÚfiveÚsixÚsevenÚeightÚnineÚcolonÚ	semicolonÚlessÚequalÚgreaterÚquestionÚatÚAr   ÚCÚDÚEÚFÚGÚHÚIÚJÚKÚLÚMÚNÚOÚPÚQÚRÚSÚTÚUÚVÚWÚXÚYÚZÚbracketleftÚ	backslashÚbracketrightÚasciicircumÚ
underscoreÚ	quoteleftÚaÚbÚcr´  ÚeÚfÚgÚhr5  ÚjÚkr¾  rŽ  r-  ÚoÚpÚqÚrr"   ÚtÚur1  ÚwÚxÚyÚzÚ	braceleftÚbarÚ
bracerightÚ
asciitildeÚ
exclamdownÚcentÚsterlingÚfractionÚyenÚflorinÚsectionÚcurrencyÚquotesingleÚquotedblleftÚguillemotleftÚguilsinglleftÚguilsinglrightÚfiÚflÚendashÚdaggerÚ	daggerdblÚperiodcenteredÚ	paragraphÚbulletÚquotesinglbaseÚquotedblbaseÚquotedblrightÚguillemotrightÚellipsisÚperthousandÚquestiondownÚgraveÚacuteÚ
circumflexÚtildeÚmacronÚbreveÚ	dotaccentÚdieresisÚringÚcedillaÚhungarumlautÚogonekÚcaronÚemdashÚAEÚordfeminineÚLslashÚOslashÚOEÚordmasculineÚaeÚdotlessiÚlslashÚoslashÚoeÚ
germandblsÚonesuperiorÚ
logicalnotÚmuÚ	trademarkÚEthÚonehalfÚ	plusminusÚThornÚ
onequarterÚdivideÚ	brokenbarÚdegreeÚthornÚthreequartersÚtwosuperiorÚ
registeredÚminusÚethÚmultiplyÚthreesuperiorÚ	copyrightÚAacuteÚAcircumflexÚ	AdieresisÚAgraveÚAringÚAtildeÚCcedillaÚEacuteÚEcircumflexÚ	EdieresisÚEgraveÚIacuteÚIcircumflexÚ	IdieresisÚIgraveÚNtildeÚOacuteÚOcircumflexÚ	OdieresisÚOgraveÚOtildeÚScaronÚUacuteÚUcircumflexÚ	UdieresisÚUgraveÚYacuteÚ	YdieresisÚZcaronÚaacuteÚacircumflexÚ	adieresisÚagraveÚaringÚatildeÚccedillaÚeacuteÚecircumflexÚ	edieresisÚegraveÚiacuteÚicircumflexÚ	idieresisÚigraveÚntildeÚoacuteÚocircumflexÚ	odieresisÚograveÚotildeÚscaronÚuacuteÚucircumflexÚ	udieresisÚugraveÚyacuteÚ	ydieresisÚzcaronÚexclamsmallÚHungarumlautsmallÚdollaroldstyleÚdollarsuperiorÚampersandsmallÚ
AcutesmallÚparenleftsuperiorÚparenrightsuperiorÚtwodotenleaderÚonedotenleaderÚzerooldstyleÚoneoldstyleÚtwooldstyleÚthreeoldstyleÚfouroldstyleÚfiveoldstyleÚsixoldstyleÚsevenoldstyleÚeightoldstyleÚnineoldstyleÚcommasuperiorÚthreequartersemdashÚperiodsuperiorÚquestionsmallÚ	asuperiorÚ	bsuperiorÚcentsuperiorÚ	dsuperiorÚ	esuperiorÚ	isuperiorÚ	lsuperiorÚ	msuperiorÚ	nsuperiorÚ	osuperiorÚ	rsuperiorÚ	ssuperiorÚ	tsuperiorÚffÚffiÚfflÚparenleftinferiorÚparenrightinferiorÚCircumflexsmallÚhyphensuperiorÚ
GravesmallÚAsmallÚBsmallÚCsmallÚDsmallÚEsmallÚFsmallÚGsmallÚHsmallÚIsmallÚJsmallÚKsmallÚLsmallÚMsmallÚNsmallÚOsmallÚPsmallÚQsmallÚRsmallÚSsmallÚTsmallÚUsmallÚVsmallÚWsmallÚXsmallÚYsmallÚZsmallÚcolonmonetaryÚ	onefittedÚrupiahÚ
TildesmallÚexclamdownsmallÚcentoldstyleÚLslashsmallÚScaronsmallÚZcaronsmallÚDieresissmallÚ
BrevesmallÚ
CaronsmallÚDotaccentsmallÚMacronsmallÚ
figuredashÚhypheninferiorÚOgoneksmallÚ	RingsmallÚCedillasmallÚquestiondownsmallÚ	oneeighthÚthreeeighthsÚfiveeighthsÚseveneighthsÚonethirdÚ	twothirdsÚzerosuperiorÚfoursuperiorÚfivesuperiorÚsixsuperiorÚsevensuperiorÚeightsuperiorÚninesuperiorÚzeroinferiorÚoneinferiorÚtwoinferiorÚthreeinferiorÚfourinferiorÚfiveinferiorÚsixinferiorÚseveninferiorÚeightinferiorÚnineinferiorÚcentinferiorÚdollarinferiorÚperiodinferiorÚcommainferiorÚAgravesmallÚAacutesmallÚAcircumflexsmallÚAtildesmallÚAdieresissmallÚ
AringsmallÚAEsmallÚCcedillasmallÚEgravesmallÚEacutesmallÚEcircumflexsmallÚEdieresissmallÚIgravesmallÚIacutesmallÚIcircumflexsmallÚIdieresissmallÚEthsmallÚNtildesmallÚOgravesmallÚOacutesmallÚOcircumflexsmallÚOtildesmallÚOdieresissmallÚOEsmallÚOslashsmallÚUgravesmallÚUacutesmallÚUcircumflexsmallÚUdieresissmallÚYacutesmallÚ
ThornsmallÚYdieresissmallz001.000z001.001z001.002z001.003ÚBlackÚBoldÚBookÚLightÚMediumÚRegularÚRomanÚSemiboldi‡  )år5  r¬  r­  r®  r¯  r°  r±  r²  r³  r´  rµ  r¶  r·  r¸  r¹  rº  r»  r¼  r½  r¾  r¿  rÀ  rÁ  rÂ  rÃ  rÄ  rÅ  rÆ  rÇ  rÈ  rÉ  rÊ  rË  rÌ  rÍ  r   rÎ  rÏ  rÐ  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  rß  rà  rá  râ  rã  rä  rå  ræ  rç  rè  ré  rê  rë  rì  rí  rî  r´  rï  rð  rñ  rò  r5  ró  rô  r¾  rŽ  r-  rõ  rö  r÷  rø  r"   rù  rú  r1  rû  rü  rý  rþ  rÿ  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r€  r�  r‚  rƒ  r„  r…  r†  r‡  éå   )¦r5  r¬  rˆ  r‰  rŠ  r‹  rŒ  r�  rŽ  r�  r�  r‘  r¸  r¹  rº  r  r’  r“  r”  r•  r–  r—  r˜  r™  rš  r›  rÆ  rÇ  rœ  r�  rž  rŸ  r   r¡  r¢  r£  r¤  r¥  r¦  r§  r¨  r©  rª  r«  r¬  r­  r  r  r®  r¯  r°  r±  r²  r³  r´  rµ  r¶  r·  r¸  r¹  rº  r»  r¼  r½  r¾  r¿  rÀ  rÁ  rÂ  rÃ  rÄ  rÅ  rÆ  rÇ  rÈ  rÉ  rÊ  rË  rÌ  rÍ  rÎ  rÏ  rÐ  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  rß  rà  rá  rA  r>  rF  râ  rã  rä  rå  ræ  rç  rè  ré  r9  rG  rL  rê  rë  rì  rí  rî  rï  rð  rñ  rò  ró  rô  rõ  rö  r÷  rø  rù  rú  rû  rü  rý  rþ  rÿ  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  é¦   )Wr5  r¬  rŠ  r‹  rŽ  r�  r�  r‘  r¸  r¹  rº  r  r’  r“  r”  r•  r–  r—  r˜  r™  rš  r›  rÆ  rÇ  rœ  r�  rž  r   r¡  r¢  r£  r¤  r¥  r¦  r§  r¨  r©  rª  r«  r¬  r­  r  r  r®  r¯  r°  r±  r³  rÏ  rÐ  rÑ  rÔ  rÝ  rÞ  rA  r>  rF  rã  rä  rå  ræ  rç  rè  ré  r9  rG  rL  rê  rë  rì  rí  rî  rï  rð  rñ  rò  ró  rô  rõ  rö  r÷  rø  rù  rú  rû  rü  rý  éW   )‡r¢   ÚfontTools.miscr   r   ÚfontTools.misc.arrayToolsr   r   ÚfontTools.misc.textToolsr   r   r	   r
   r   r   ÚfontTools.ttLibr   ÚfontTools.ttLib.tables.otBaser   r   ÚfontTools.ttLib.tablesr   rV  Úior   r/   Úloggingrå  r¯   Ú	getLoggerrŸ   r®   r+   rj  Úobjectr   r_   r²   r¾   rÖ   r°   rë   rõ   rý   r  r4   r<   r=  r6   rJ  rP  rl  re   r  r  r  rÒ   rÑ   rÐ   r«  r®  r±  r¹  r¼  r¿  rÁ  rÃ  rÅ  rÒ  rÝ  rê  rð  rò  rÿ  r  r	  r  r  r   r3  rK  rN  rQ  r7  r8  r$  r%  rc  rn  r�  rw  ru  rv  re  rf  r’  r—  rŸ  r¦  r®  r°  r²  r¹  rÂ  r   rƒ  r÷  r6  r$  r˜  r  ÚDictDecompilerr  r#  r&  r5  rV  r`  rg  rl  r‚   rE  r  r8   r¤  r£  rF   r¨  r  Ú_ir'  rB  r(  rC  r)  rD  r£   rC   r#   ú<module>r5     sò  ðñõ #Ý (ß 8÷÷ õ #Ý 7Ý 7Ý 1Ý Û Û Û 	ð 	�‰˜Ñ€Ø€g×Ñ˜Ó!€ð€ð €ô`(�ô `(ôF	/&�ô /&òd	ôI%�Fô I%ôX˜]ô ô
!;˜=ô !;ôH&-˜=ô &-ôR	˜-ô 	ô.Ð'ô .ô1Ð-ô 1ôDˆFô DôNh �uô h ôV"Ð!ô "ô4 �5ô 4 ôn �5ô  ôF3�6ô 3ôl3,ˆvô 3,ôlH)�&ô H)òV!òò
ò
ò)ò)òò$ò$òòòòòô�fô ô2;�_ô ;ô<�oô <ò$òô�oô ô2�_ô ô8�_ô ô$˜>ô ô.�^ô ô:˜>ô :ôz;�ô ;ô|�fô ò, ò,ò ò
ò"òJ
òô(�vô ô*<˜ô <ò~(òòòò&ò.ôD�~ô ô8˜ô ôB˜ô ò(òò*ô*�vô ôB�vô ô$R�?ô Rð"&à*ð&ð ˆuÐ.°±l³nÐEð&ð 6ð	&ð
 &ð&ð ˆ�%˜™Ó0Ð1ð&ð ˆk˜5 $©Ó(9Ð:ð&ð ˆ
�E˜4¡Ó!2Ð3ð&ð ˆz˜5 $©Ó(9Ð:ð&ð ˆ�e˜T¡?Ó#4Ð5ð&ð %ð&ð 1ð&ð 0ð&ð 9ð&ð 8ð&ð  .ð!&ð" 3ð#&ð$ ˆl˜GÒ%?ÀÐFð%&ð& +ð'&ð( ˆ
�Gš\¨4Ð0ð)&ð* 0ð+&ð, &ð-&ð. 0ð/&ð0 2ð1&ð2 5ð3&ð4 4ð5&ð6 5ð7&ð8 1ð9&ð: 1ð;&ð< ˆ�H˜dÑ$4Ó$6Ð7ð=&ð> 0ð?&ð@ ˆ�X˜qÑ"3Ó"5Ð6ðA&ðB ˆÐ(¨$Ñ0DÓ0FÐGðC&ðD ˆz˜8 TÑ+<Ó+>Ð?ðE&ðF ˆy˜( DÑ*:Ó*<Ð=ðG&ðH ˆ˜ $Ñ(<Ó(>Ð?ðI&ðJ ˆ�X˜tÑ%6Ó%8Ð9ðK&Ð ðT +Øˆl˜GÒ%?ÀÐFØˆz˜8 TÑ+<Ó+>Ð?Øˆy˜( DÑ*:Ó*<Ð=Øˆ˜ $Ñ(<Ó(>Ð?Øˆ�X˜tÑ%6Ó%8Ð9ðÐ ð Ð Ø
€ð *àØØØØðð +Ø*Ø+Ø0Ø4Ø.Ø-Ø'Ø'Ø0Ø0Ø.Ø:Ø-Ø2Ø7Ø6Ø,Ø,Øˆ�(˜D¡.Ó"2Ð3ð;Ð ðD *àØØØØðð +Ø*Ø+Ø0Ø4Ø.Ø-Ø'Ø'Ø0Ø0Ø2Ø7Øˆ�(˜D¡.Ó"2Ð3ð/Ð ò60ñ$ Ð"Ô #Ù ÐÔ ô4˜×4Ñ4ô 4ô8˜M×8Ñ8ô 8ôf�6ô fòR/ôC�lô CôL*�|ô *ôZ˜,ô ô O#ˆvô O#ôdo4ˆhô o4ôd7!ˆxô 7!ôt"�(ô "ôJ*U�Vô *Uò`HÐ ðT Ð Ù
ÐÓÐ"8Ò8Ð 8Ð8àÐ Ù
Ð&Ó
'ò :€BØ79ÐÐ/°Ñ3Ò4ð:òfÐ ðP Ð Ù
ÐÓÐ"8Ò8Ð 8Ð8ògÐ ðR Ð Ù
ÐÓÐ!5Ò5Ð 5Ð5òXÐ ðt  Ð Ù
Ð!Ó"Ð&@Ò@Ð @Ñ@rC   