
    h                    $   S SK Jr  S SKJr  S SK Jr  S SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJr  S S	KJr  S S
KJrJr  S SK7  S SK7  S SKJrJr  S SKJr  S SKrS SKrS SKrS SKrS SKJ r J!r!  S SK"J#r#  S SK$J%r%  Sr&S\&-   S-   r'\RP                  " S5      r)SS jr*\%" \*\)5      \)l+        \" \RP                  " S5      S9r,S r-S r.\" \R^                  5      S 5       r0\" \R^                  5      S 5       r1\" \R^                  5      S 5       r2\" \R^                  5      S 5       r3\" \Rh                  5      S 5       r0\" \Rh                  5      S  5       r5\" \Rh                  5      SS! j5       r2\" \Rh                  5      S" 5       r3\" \Rl                  5      S# 5       r7\" \Rl                  5      S$ 5       r8\" \Rr                  5      S% 5       r7\" \Rr                  5      S& 5       r8\" \Rt                  5      S' 5       r7\" \Rt                  5      S( 5       r8\" \Rv                  5      S) 5       r7\" \Rv                  5      S* 5       r8\" \Rx                  5      S+ 5       r7\" \Rx                  5      S, 5       r8\" \Rz                  5      S- 5       r>\" \R~                  5      S. 5       r@\" \R                  5      S/ 5       r8\" \R                  5      S0 5       rB\" \R                  5      S1 5       r8\" \R                  5      S2 5       rB\" \R                  5      S3 5       r8\" \R                  5      S4 5       r@\" \R                  5      S5 5       rB\" \R                  5      S6 5       r8\" \R                  5      S7 5       rB\" \R                  5      S8 5       r8\" \R                  5      S9 5       rB\" \R                  5      S: 5       r8\" \R                  5      S; 5       rB\" \Rl                  \Rr                  \Rt                  \Rv                  \Rx                  \R                  \R                  \R                  \R                  \R                  \R                  5      S< 5       rI\" \Rl                  \Rr                  \Rt                  \Rv                  \Rx                  \R                  \R                  \R                  \R                  \R                  \R                  5      S= 5       rJ\" \Rl                  \Rr                  \Rt                  \Rv                  \Rx                  \R                  \R                  \R                  \R                  5	      S> 5       rB\" \Rl                  \Rt                  \Rx                  5      S? 5       rO\" \Rr                  \Rv                  \R                  \R                  5      S@ 5       rO\" \R                  \R                  \R                  \R                  5      SA 5       rP\" \R                  \R                  5      SB 5       r7\" \R                  \R                  \R                  \R                  5      SC 5       r8\" \R                  \R                  \R                  \R                  5      SD 5       rI\" \R                  \R                  \R                  \R                  5      SE 5       rJ\" \R                  5      SF 5       r7\" \R                  5      SG 5       rO\" \R                  \R                  5      SH 5       r8\" \R                  \R                  5      SI 5       rB\" \R                  \R                  5      SJ 5       rI\" \R                  \R                  5      SK 5       rJ\" \R                  5      SSL j5       r7\" \R                  5      SM 5       r8\" \R                  5      SN 5       rB\" \R                  5      SO 5       rI\" \R                  5      SP 5       rJ\" \R                  5      SQ 5       rO\" \R                  5      SR 5       r8\" \R                  5      SS 5       rB\" \R                  5      ST 5       rI\" \R                  5      SU 5       rU\" \R                  5      SV 5       rV\" \R                  5      SW 5       rI\" \R                  5      SX 5       rI\" \R                  5      SY 5       rJ\" \R                  5      SZ 5       rY\" \R                  5      S[ 5       rI\" \R                  5      S\ 5       rI\" \R                  5      S] 5       rJ\" \R                  5      S^ 5       rY\" \R                  5      S_ 5       rY\" \R                  \R                  5      S` 5       rY\" \R                  \R                  5      Sa 5       r^\" \R                  5      SSb j5       rY\" \R                  5      Sc 5       r^\" \R                  5      Sd 5       rY\" \R                  5      Se 5       r^\" \R                  " Sf5      5      Sg 5       r8\" \R                  " Sh5      5      Si 5       r8\" \R                  " Sj5      5      Sk 5       r8\" \R                  " Sl5      5      Sm 5       r7\" \R                  " Sl5      \R                  " Sn5      5      So 5       r8\" \R                  " Sl5      \R                  " Sn5      5      Sp 5       rb\" \R                  " Sl5      \R                  " Sn5      5      Sq 5       rI\" \R                  " Sl5      \R                  " Sn5      5      Sr 5       rU\" \R                  " Sl5      \R                  " Sn5      5      SSs j5       rc\" \R                  " Sl5      \R                  " Sn5      5      St 5       rd\" \R                  " Sl5      \R                  " Sn5      5      Su 5       re\" \R                  " Sl5      \R                  " Sn5      5      Sv 5       rf\" \R                  " Sl5      \R                  " Sn5      5      Sw 5       rg\" \R                  " Sl5      \R                  " Sn5      5      Sx 5       rh\" \R                  " Sl5      \R                  " Sn5      5      Sy 5       rB\" \R                  " Sz5      5      S{ 5       r8S| ri\" \R                  " Sz5      5      S} 5       rB\" \R                  " S~5      5      S 5       rg\" \R                  " S~5      5      S 5       r8\" \R                  " S5      5      S 5       r8\" \R                  " S5      5      S 5       r8\" \R                  " S5      5      S 5       r8\" \R                  " S5      5      S 5       r8\" \R                  " S5      5      S 5       r7\" \R                  " S5      5      S 5       r8\" \R                  " S5      5      S 5       r8\" \R                  " S5      5      S 5       rg\" \R                  " S5      5      S 5       r8S rj\" \R                  " S5      5      S 5       r8\" \R                  " S5      5      S 5       r8\" \R                  " S5      5      S 5       r8\" \R                  " S5      5      S 5       r8\" \R                  " S5      5      S 5       rg\" \R                  " S5      5      S 5       r8\" \R                  " S5      5      S 5       r8S rk\" \R                  " S5      5      S 5       r7\" \R                  " S5      5      S 5       r8\" \R                  " S5      5      S 5       rB\" \R                  5      S 5       r7\" \R                  5      S 5       r7\" \R                  " S5      5      S 5       r8\" \R                  " S5      5      S 5       r7\" \R                  " S5      5      S 5       rB\" \R                  " S5      5      S 5       r7\" \R                  5      S 5       r8\" \R                  5      S 5       r8\" \R                  5      S 5       r8\" \R                  5      S 5       r8\" \R                  5      S 5       r8\" \R                  " S5      5      S 5       r8\" \R                  " S5      R                  5      S 5       rt\" \R                  " S5      5      S 5       r7\" \R                  " S5      5      S 5       rg\" \R                  " S5      5      S 5       r8\" \R                  " S5      5      S 5       rB\" \R                  " S5      5      S 5       r7\" \R                  " S5      5      S 5       rg\" \R                  " S5      5      S 5       r8\" \R                  " S5      5      S 5       rg\" \R                  " S5      5      S 5       rg\" \R                  " S5      5      S 5       rB\" \R                  " S5      5      S 5       rB " S S\u5      rv " S S\u5      rw\," S5      SS j5       rx\," S5      S 5       ryS rzS r{S r|S r}\," S5      SS j5       r~/ SQrg)    )config)otRound)ttLib)otTables)USE_HARFBUZZ_REPACKER)
maxCtxFont)NullPen)Timer)makeOutputFileName)_add_method
_uniq_sort)*)varStoremultiVarStore)NameRecordVisitorN)Counterdefaultdict)reduce)
MethodTypez3pyftsubset font-file [glyph...] [--option=value]...a  pyftsubset -- OpenType font subsetter and optimizer

pyftsubset is an OpenType font subsetter and optimizer, based on fontTools.
It accepts any TT- or CFF-flavored OpenType (.otf or .ttf) or WOFF (.woff)
font file. The subsetted glyph set is based on the specified glyphs
or characters, and specified OpenType layout features.

The tool also performs some size-reducing optimizations, aimed for using
subset fonts as webfonts.  Individual optimizations can be enabled or
disabled, and are enabled by default when they are safe.

Usage: a9  

At least one glyph or one of --gids, --gids-file, --glyphs, --glyphs-file,
--text, --text-file, --unicodes, or --unicodes-file, must be specified.

Args:

font-file
  The input font file.
glyph
  Specify one or more glyph identifiers to include in the subset. Must be
  PS glyph names, or the special string '*' to keep the entire glyph set.

Initial glyph set specification
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

These options populate the initial glyph set. Same option can appear
multiple times, and the results are accummulated.

--gids=<NNN>[,<NNN>...]
  Specify comma/whitespace-separated list of glyph IDs or ranges as decimal
  numbers.  For example, --gids=10-12,14 adds glyphs with numbers 10, 11,
  12, and 14.

--gids-file=<path>
  Like --gids but reads from a file. Anything after a '#' on any line is
  ignored as comments.

--glyphs=<glyphname>[,<glyphname>...]
  Specify comma/whitespace-separated PS glyph names to add to the subset.
  Note that only PS glyph names are accepted, not gidNNN, U+XXXX, etc
  that are accepted on the command line.  The special string '*' will keep
  the entire glyph set.

--glyphs-file=<path>
  Like --glyphs but reads from a file. Anything after a '#' on any line
  is ignored as comments.

--text=<text>
  Specify characters to include in the subset, as UTF-8 string.

--text-file=<path>
  Like --text but reads from a file. Newline character are not added to
  the subset.

--unicodes=<XXXX>[,<XXXX>...]
  Specify comma/whitespace-separated list of Unicode codepoints or
  ranges as hex numbers, optionally prefixed with 'U+', 'u', etc.
  For example, --unicodes=41-5a,61-7a adds ASCII letters, so does
  the more verbose --unicodes=U+0041-005A,U+0061-007A.
  The special strings '*' will choose all Unicode characters mapped
  by the font.

--unicodes-file=<path>
  Like --unicodes, but reads from a file. Anything after a '#' on any
  line in the file is ignored as comments.

--ignore-missing-glyphs
  Do not fail if some requested glyphs or gids are not available in
  the font.

--no-ignore-missing-glyphs
  Stop and fail if some requested glyphs or gids are not available
  in the font. [default]

--ignore-missing-unicodes [default]
  Do not fail if some requested Unicode characters (including those
  indirectly specified using --text or --text-file) are not available
  in the font.

--no-ignore-missing-unicodes
  Stop and fail if some requested Unicode characters are not available
  in the font.
  Note the default discrepancy between ignoring missing glyphs versus
  unicodes.  This is for historical reasons and in the future
  --no-ignore-missing-unicodes might become default.

Other options
^^^^^^^^^^^^^

For the other options listed below, to see the current value of the option,
pass a value of '?' to it, with or without a '='. In some environments,
you might need to escape the question mark, like this: '--glyph-names\?'.

Examples::

    $ pyftsubset --glyph-names?
    Current setting for 'glyph-names' is: False
    $ pyftsubset --name-IDs=?
    Current setting for 'name-IDs' is: [0, 1, 2, 3, 4, 5, 6]
    $ pyftsubset --hinting? --no-hinting --hinting?
    Current setting for 'hinting' is: True
    Current setting for 'hinting' is: False

Output options
^^^^^^^^^^^^^^

--output-file=<path>
  The output font file. If not specified, the subsetted font
  will be saved in as font-file.subset.

--flavor=<type>
  Specify flavor of output font file. May be 'woff' or 'woff2'.
  Note that WOFF2 requires the Brotli Python extension, available
  at https://github.com/google/brotli

--with-zopfli
  Use the Google Zopfli algorithm to compress WOFF. The output is 3-8 %
  smaller than pure zlib, but the compression speed is much slower.
  The Zopfli Python bindings are available at:
  https://pypi.python.org/pypi/zopfli

--harfbuzz-repacker
  By default, we serialize GPOS/GSUB using the HarfBuzz Repacker when
  uharfbuzz can be imported and is successful, otherwise fall back to
  the pure-python serializer. Set the option to force using the HarfBuzz
  Repacker (raises an error if uharfbuzz can't be found or fails).

--no-harfbuzz-repacker
  Always use the pure-python serializer even if uharfbuzz is available.

Glyph set expansion
^^^^^^^^^^^^^^^^^^^

These options control how additional glyphs are added to the subset.

--retain-gids
  Retain glyph indices; just empty glyphs not needed in-place.

--notdef-glyph
  Add the '.notdef' glyph to the subset (ie, keep it). [default]

--no-notdef-glyph
  Drop the '.notdef' glyph unless specified in the glyph set. This
  saves a few bytes, but is not possible for Postscript-flavored
  fonts, as those require '.notdef'. For TrueType-flavored fonts,
  this works fine as long as no unsupported glyphs are requested
  from the font.

--notdef-outline
  Keep the outline of '.notdef' glyph. The '.notdef' glyph outline is
  used when glyphs not supported by the font are to be shown. It is not
  needed otherwise.

--no-notdef-outline
  When including a '.notdef' glyph, remove its outline. This saves
  a few bytes. [default]

--recommended-glyphs
  Add glyphs 0, 1, 2, and 3 to the subset, as recommended for
  TrueType-flavored fonts: '.notdef', 'NULL' or '.null', 'CR', 'space'.
  Some legacy software might require this, but no modern system does.

--no-recommended-glyphs
  Do not add glyphs 0, 1, 2, and 3 to the subset, unless specified in
  glyph set. [default]

--no-layout-closure
  Do not expand glyph set to add glyphs produced by OpenType layout
  features.  Instead, OpenType layout features will be subset to only
  rules that are relevant to the otherwise-specified glyph set.

--layout-features[+|-]=<feature>[,<feature>...]
  Specify (=), add to (+=) or exclude from (-=) the comma-separated
  set of OpenType layout feature tags that will be preserved.
  Glyph variants used by the preserved features are added to the
  specified subset glyph set. By default, 'calt', 'ccmp', 'clig', 'curs',
  'dnom', 'frac', 'kern', 'liga', 'locl', 'mark', 'mkmk', 'numr', 'rclt',
  'rlig', 'rvrn', and all features required for script shaping are
  preserved. To see the full list, try '--layout-features=?'.
  Use '*' to keep all features.
  Multiple --layout-features options can be provided if necessary.
  Examples:

    --layout-features+=onum,pnum,ss01
        * Keep the default set of features and 'onum', 'pnum', 'ss01'.
    --layout-features-='mark','mkmk'
        * Keep the default set of features but drop 'mark' and 'mkmk'.
    --layout-features='kern'
        * Only keep the 'kern' feature, drop all others.
    --layout-features=''
        * Drop all features.
    --layout-features='*'
        * Keep all features.
    --layout-features+=aalt --layout-features-=vrt2
        * Keep default set of features plus 'aalt', but drop 'vrt2'.

--layout-scripts[+|-]=<script>[,<script>...]
  Specify (=), add to (+=) or exclude from (-=) the comma-separated
  set of OpenType layout script tags that will be preserved. LangSys tags
  can be appended to script tag, separated by '.', for example:
  'arab.dflt,arab.URD,latn.TRK'. By default all scripts are retained ('*').

Hinting options
^^^^^^^^^^^^^^^

--hinting
  Keep hinting [default]

--no-hinting
  Drop glyph-specific hinting and font-wide hinting tables, as well
  as remove hinting-related bits and pieces from other tables (eg. GPOS).
  See --hinting-tables for list of tables that are dropped by default.
  Instructions and hints are stripped from 'glyf' and 'CFF ' tables
  respectively. This produces (sometimes up to 30%) smaller fonts that
  are suitable for extremely high-resolution systems, like high-end
  mobile devices and retina displays.

Optimization options
^^^^^^^^^^^^^^^^^^^^

--desubroutinize
  Remove CFF use of subroutinizes.  Subroutinization is a way to make CFF
  fonts smaller.  For small subsets however, desubroutinizing might make
  the font smaller.  It has even been reported that desubroutinized CFF
  fonts compress better (produce smaller output) WOFF and WOFF2 fonts.
  Also see note under --no-hinting.

--no-desubroutinize [default]
  Leave CFF subroutinizes as is, only throw away unused subroutinizes.

Font table options
^^^^^^^^^^^^^^^^^^

--drop-tables[+|-]=<table>[,<table>...]
  Specify (=), add to (+=) or exclude from (-=) the comma-separated
  set of tables that will be be dropped.
  By default, the following tables are dropped:
  'BASE', 'JSTF', 'DSIG', 'EBDT', 'EBLC', 'EBSC', 'PCLT', 'LTSH'
  and Graphite tables: 'Feat', 'Glat', 'Gloc', 'Silf', 'Sill'.
  The tool will attempt to subset the remaining tables.

  Examples:

  --drop-tables-=BASE
      * Drop the default set of tables but keep 'BASE'.

  --drop-tables+=GSUB
      * Drop the default set of tables and 'GSUB'.

  --drop-tables=DSIG
      * Only drop the 'DSIG' table, keep all others.

  --drop-tables=
      * Keep all tables.

--no-subset-tables+=<table>[,<table>...]
  Add to the set of tables that will not be subsetted.
  By default, the following tables are included in this list, as
  they do not need subsetting (ignore the fact that 'loca' is listed
  here): 'gasp', 'head', 'hhea', 'maxp', 'vhea', 'OS/2', 'loca', 'name',
  'cvt ', 'fpgm', 'prep', 'VMDX', 'DSIG', 'CPAL', 'MVAR', 'cvar', 'STAT'.
  By default, tables that the tool does not know how to subset and are not
  specified here will be dropped from the font, unless --passthrough-tables
  option is passed.

  Example:

   --no-subset-tables+=FFTM
      * Keep 'FFTM' table in the font by preventing subsetting.

--passthrough-tables
  Do not drop tables that the tool does not know how to subset.

--no-passthrough-tables
  Tables that the tool does not know how to subset and are not specified
  in --no-subset-tables will be dropped from the font. [default]

--hinting-tables[-]=<table>[,<table>...]
  Specify (=), add to (+=) or exclude from (-=) the list of font-wide
  hinting tables that will be dropped if --no-hinting is specified.

  Examples:

  --hinting-tables-=VDMX
      * Drop font-wide hinting tables except 'VDMX'.
  --hinting-tables=
      * Keep all font-wide hinting tables (but strip hints from glyphs).

--legacy-kern
  Keep TrueType 'kern' table even when OpenType 'GPOS' is available.

--no-legacy-kern
  Drop TrueType 'kern' table if OpenType 'GPOS' is available. [default]

Font naming options
^^^^^^^^^^^^^^^^^^^

These options control what is retained in the 'name' table. For numerical
codes, see: http://www.microsoft.com/typography/otspec/name.htm

--name-IDs[+|-]=<nameID>[,<nameID>...]
  Specify (=), add to (+=) or exclude from (-=) the set of 'name' table
  entry nameIDs that will be preserved. By default, only nameIDs between 0
  and 6 are preserved, the rest are dropped. Use '*' to keep all entries.

  Examples:

  --name-IDs+=7,8,9
      * Also keep Trademark, Manufacturer and Designer name entries.
  --name-IDs=
      * Drop all 'name' table entries.
  --name-IDs=*
      * keep all 'name' table entries

--name-legacy
  Keep legacy (non-Unicode) 'name' table entries (0.x, 1.x etc.).
  XXX Note: This might be needed for some fonts that have no Unicode name
  entires for English. See: https://github.com/fonttools/fonttools/issues/146

--no-name-legacy
  Drop legacy (non-Unicode) 'name' table entries [default]

--name-languages[+|-]=<langID>[,<langID>]
  Specify (=), add to (+=) or exclude from (-=) the set of 'name' table
  langIDs that will be preserved. By default only records with langID
  0x0409 (English) are preserved. Use '*' to keep all langIDs.

--obfuscate-names
  Make the font unusable as a system font by replacing name IDs 1, 2, 3, 4,
  and 6 with dummy strings (it is still fully functional as webfont).

Glyph naming and encoding options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

--glyph-names
  Keep PS glyph names in TT-flavored fonts. In general glyph names are
  not needed for correct use of the font. However, some PDF generators
  and PDF viewers might rely on glyph names to extract Unicode text
  from PDF documents.
--no-glyph-names
  Drop PS glyph names in TT-flavored fonts, by using 'post' table
  version 3.0. [default]
--legacy-cmap
  Keep the legacy 'cmap' subtables (0.x, 1.x, 4.x etc.).
--no-legacy-cmap
  Drop the legacy 'cmap' subtables. [default]
--symbol-cmap
  Keep the 3.0 symbol 'cmap'.
--no-symbol-cmap
  Drop the 3.0 symbol 'cmap'. [default]

Other font-specific options
^^^^^^^^^^^^^^^^^^^^^^^^^^^

--recalc-bounds
    Recalculate font bounding boxes.
--no-recalc-bounds
    Keep original font bounding boxes. This is faster and still safe
    for all practical purposes. [default]
--recalc-timestamp
    Set font 'modified' timestamp to current time.
--no-recalc-timestamp
    Do not modify font 'modified' timestamp. [default]
--canonical-order
    Order tables as recommended in the OpenType standard. This is not
    required by the standard, nor by any known implementation.
--no-canonical-order
    Keep original order of font tables. This is faster. [default]
--prune-unicode-ranges
    Update the 'OS/2 ulUnicodeRange*' bits after subsetting. The Unicode
    ranges defined in the OpenType specification v1.7 are intersected with
    the Unicode codepoints specified in the font's Unicode 'cmap' subtables:
    when no overlap is found, the bit will be switched off. However, it will
    *not* be switched on if an intersection is found.  [default]
--no-prune-unicode-ranges
    Don't change the 'OS/2 ulUnicodeRange*' bits.
--prune-codepage-ranges
    Update the 'OS/2 ulCodePageRange*' bits after subsetting.  [default]
--no-prune-codepage-ranges
    Don't change the 'OS/2 ulCodePageRange*' bits.
--recalc-average-width
    Update the 'OS/2 xAvgCharWidth' field after subsetting.
--no-recalc-average-width
    Don't change the 'OS/2 xAvgCharWidth' field. [default]
--recalc-max-context
    Update the 'OS/2 usMaxContext' field after subsetting.
--no-recalc-max-context
    Don't change the 'OS/2 usMaxContext' field. [default]
--font-number=<number>
    Select font number for TrueType Collection (.ttc/.otc), starting from 0.
--pretty-svg
    When subsetting SVG table, use lxml pretty_print=True option to indent
    the XML output (only recommended for debugging purposes).

Application options
^^^^^^^^^^^^^^^^^^^

--verbose
    Display verbose information of the subsetting process.
--timing
    Display detailed timing information of the subsetting process.
--xml
    Display the TTX XML representation of subsetted font.

Example
^^^^^^^

Produce a subset containing the characters ' !"#$%' without performing
size-reducing optimizations::

  $ pyftsubset font.ttf --unicodes="U+0020-0025" \
    --layout-features=* --glyph-names --symbol-cmap --legacy-cmap \
    --notdef-glyph --notdef-outline --recommended-glyphs \
    --name-IDs=* --name-legacy --name-languages=*
zfontTools.subsetc                    ^ U R                  S[        U5      5        U(       a6  UR                  5       mU R                  S[        U4S jU 5       5      5        g g )NzGlyph names: %szGlyph IDs:   %sc              3   .   >#    U  H
  nTU   v   M     g 7fN ).0greverseGlyphMaps     K/var/www/html/env/lib/python3.13/site-packages/fontTools/subset/__init__.py	<genexpr>_log_glyphs.<locals>.<genexpr>  s     +O1OA,>   )infosortedgetReverseGlyphMap)selfglyphsfontr   s      @r   _log_glyphsr'     sF    II0113		#V+O+O%OP     zfontTools.subset.timer)loggerc                 6    U Vs0 s H  o"X   _M	     sn$ s  snf r   r   )dr%   r   s      r   _dict_subsetr,     s    #$VqtGV$$$s   c                 Z    [        U 5      nU Vs/ s H  o3U:  d  M
  X   PM     sn$ s  snf r   len)lindicescountis       r   _list_subsetr4     s+    FE!/'QYDAD'///s   	((c                 p    [        U R                  5       VVs/ s H  u  p#X1;   d  M  UPM     snn$ s  snnf )z3Returns ascending list of matching coverage values.)	enumerater%   )r$   r%   r3   r   s       r   	intersectr7     s-     $DKK0@0$!AKA0@@@s   22c                 B   ^ [        U4S jU R                   5       5      $ )z#Returns set of intersecting glyphs.c              3   6   >#    U  H  oT;   d  M
  Uv   M     g 7fr   r   )r   r   r%   s     r   r   #intersect_glyphs.<locals>.<genexpr>  s     5+Qfqq+s   		)setr%   )r$   r%   s    `r   intersect_glyphsr<     s     5$++555r(   c                     U R                  U5      nU R                   Vs/ s H  o3U;   d  M
  UPM     snU l        U$ s  snf )z4Returns ascending list of remaining coverage values.r7   r%   )r$   r%   r1   r   s       r   subsetr?     s:     nnV$G"kk9k&[1k9DKN :s   	==c                 V    U Vs/ s H  o R                   U   PM     snU l         gs  snf )zRemaps coverage.Nr%   )r$   coverage_mapr3   s      r   remaprC     s#     ,88<a;;q><8DK8s   &c           	         ^  [        [        U 4S jU 5       5      (       a  S/O/ T R                  R                  5        VVs/ s H  u  p#X!;   d  M  UPM     snn-   5      $ s  snnf )z0Returns ascending list of matching class values.c              3   @   >#    U  H  oTR                   ;  v   M     g 7fr   	classDefsr   r   r$   s     r   r   intersect.<locals>.<genexpr>  s     <VT^^+V   r   )r   anyrG   items)r$   r%   r   vs   `   r   r7   r7     sY     <V<<<!"--/
?/1;1/
?	@ 
?s   A!A!c                    ^ ^^ TS:X  a  [        U 4S jT 5       5      $ [        UU4S jT R                  R                  5        5       5      $ )z%Returns set of glyphs matching class.r   c              3   J   >#    U  H  oTR                   ;  d  M  Uv   M     g 7fr   rF   rH   s     r   r   "intersect_class.<locals>.<genexpr>  s     @f(?11fs   #	#c              3   L   >#    U  H  u  pUT:X  d  M  UT;   d  M  Uv   M     g 7fr   r   )r   r   rM   r%   klasss      r   r   rP     s%     R3TQqEzqa6kqq3s   $$	$)r;   rG   rL   )r$   r%   rR   s   ```r   intersect_classrS     s;     z@f@@@RT^^113RRRr(   c                 `  ^  T R                   R                  5        VVs0 s H  u  pEXA;   d  M  XE_M     snnT l         [        U(       a  [        U 4S jU 5       5      (       a  S/O/ [	        T R                   R                  5       5      -   5      nU(       a  T R                  U5        U$ s  snnf )z,Returns ascending list of remaining classes.c              3   @   >#    U  H  oTR                   ;  v   M     g 7fr   rF   rH   s     r   r   subset.<locals>.<genexpr>  s     &O1'>rJ   r   )rG   rL   r   rK   listvaluesrC   )r$   r%   rC   	useClass0r   rM   r1   s   `      r   r?   r?     s     (,~~';';'=M'=tqdad'=MDN  3&O&O#O#O C
t~~$$&
'	(G 

7N Ns
   B*B*c                     U R                   R                  5        VVs0 s H  u  p#X!R                  U5      _M     snnU l         gs  snnf )zRemaps classes.N)rG   rL   index)r$   	class_mapr   rM   s       r   rC   rC     s:     9=8L8L8NO8Na++8NODNOs   Ac                    ^ UR                   R                  U4S jU R                  R                  5        5       5        g )Nc              3   <   >#    U  H  u  pUT;   d  M  Uv   M     g 7fr   r   )r   r   rM   
cur_glyphss      r   r   !closure_glyphs.<locals>.<genexpr>'  s     J"6$!!z/AA"6   	)r%   updatemappingrL   r$   sr_   s     `r   closure_glyphsrf   %  s&    HHOOJ$,,"4"4"6JJr(   c                     U R                   R                  5        VVs0 s H)  u  p#X!R                  ;   d  M  X1R                  ;   d  M'  X#_M+     snnU l         [        U R                   5      $ s  snnf r   )rc   rL   r%   boolr$   re   r   rM   s       r   subset_glyphsrj   *  s[     ++--hh1=-DL s   A,A,A,c                     U R                   R                  5        H'  u  p4X2;   d  M  UR                  R                  U5        M)     g r   )rc   rL   r%   rb   )r$   re   r_   glyphsubsts        r   rf   rf   2  s1    **,HHOOE" -r(   c                    ^ U R                   R                  5        VVs0 s H5  u  p#UTR                  ;   d  M  [        U4S jU 5       5      (       d  M3  X#_M7     snnU l         [	        U R                   5      $ s  snnf )Nc              3   @   >#    U  H  oTR                   ;   v   M     g 7fr   rA   )r   subre   s     r   r    subset_glyphs.<locals>.<genexpr>>  s      >ASArJ   )rc   rL   r%   allrh   ri   s    `  r   rj   rj   9  sk     LL&&((DA= 	  >A >> 	(DL
 s   A9A9A9c                 |   ^ UR                   R                  " U4S jU R                  R                  5        5       6   g )Nc              3   <   >#    U  H  u  pUT;   d  M  Uv   M     g 7fr   r   )r   r   vlistr_   s      r   r   r`   E  s     W,CqJee,Cra   )r%   rb   
alternatesrL   rd   s     `r   rf   rf   C  s&    HHOOWDOO,A,A,CWXr(   c                 R  ^ U R                   R                  5        VVVs0 s HW  u  p#UTR                  ;   d  M  [        U4S jU 5       5      (       d  M3  X# Vs/ s H  oDTR                  ;   d  M  UPM     sn_MY     snnnU l         [	        U R                   5      $ s  snf s  snnnf )Nc              3   @   >#    U  H  oTR                   ;   v   M     g 7fr   rA   )r   rM   re   s     r   r   rq   M  s      >1ahhrJ   )rv   rL   r%   rK   rh   )r$   re   r   ru   rM   s    `   r   rj   rj   H  s     --//HA= 	/  > >> 	/u.u!QXXAu../DO
   	 /s(   B"B"B"B1B7B"B"c                    ^^ TR                   R                  " UU4S jU R                  R                  5        5       6   g )Nc              3      >#    U  HR  u  pUT;   d  M  U Vs/ s H5  n[        U4S  jUR                   5       5      (       d  M)  UR                  PM7     snv   MT     gs  snf 7f)c              3   @   >#    U  H  oTR                   ;   v   M     g 7fr   rA   r   cre   s     r   r   +closure_glyphs.<locals>.<genexpr>.<genexpr>V  s     0V1ahhrJ   N)rr   	ComponentLigGlyph)r   r   seqsseqr_   re   s       r   r   r`   U  sP      

1J XTWTcS0V0V-V\S\\TW1 Xs   A"A"(AAA")r%   rb   	ligaturesrL   rd   s    ``r   rf   rf   R  s-    HHOO

>>//1

r(   c                 x  ^ U R                   R                  5        VVs0 s H  u  p#UTR                  ;   d  M  X#_M     snnU l         U R                   R                  5        VVVs0 s H[  u  p$UU Vs/ s HG  nUR                  TR                  ;   d  M  [	        U4S jUR
                   5       5      (       d  ME  UPMI     sn_M]     snnnU l         U R                   R                  5        VVs0 s H  u  p#U(       d  M  X#_M     snnU l         [        U R                   5      $ s  snnf s  snf s  snnnf s  snnf )Nc              3   @   >#    U  H  oTR                   ;   v   M     g 7fr   rA   r|   s     r   r   rq   d  s     /U}!QXX}rJ   )r   rL   r%   r   rr   r   rh   )r$   re   r   rM   r   r   s    `    r   rj   rj   ]  s   '+~~';';'=O'=tqahhdad'=ODN ~~++- .GA 	

||qxx' ,//Us}}/U,U 
 	

 .DN (,~~';';'=C'=tqdad'=CDN P
 Ds:   D$D$&D/3D*"D*;D*D//D6 D6*D/c                 B  ^ ^ T R                   S:X  az  T R                  R                  U5      nU(       a1  [        U4S jT R                  T R
                  -    5       5      (       d  g TR                  R                  U 4S jU 5       5        g  ST R                   -  5       e)N   c              3   Z   >#    U  H   nUR                  TR                  5      v   M"     g 7fr   r>   r|   s     r   r   r`   p  s(      "
D KK!!D   (+c              3   B   >#    U  H  nTR                   U   v   M     g 7fr   )
Substituter   r3   r$   s     r   r   r`   u  s     <Gq*Gs   unknown format: %s)FormatCoverager7   rr   LookAheadCoverageBacktrackCoverager%   rb   )r$   re   r_   r1   s   ``  r   rf   rf   l  s    {{a--))*5c "
++d.D.DD"
 
 
 	<G<<4&44qr(   c                   ^ U R                   S:X  Ga  U R                  R                  TR                  5      n[	        U R
                  U5      U l        [        U R
                  5       VVs/ s H  u  p4UTR                  ;   d  M  UPM     nnn[	        U R
                  U5      U l        U R                  R                  U5        [        U R
                  5      U l	        [        U R                  =(       a,    [        U4S jU R                  U R                  -    5       5      5      $  SU R                   -  5       es  snnf )Nr   c              3   Z   >#    U  H   nUR                  TR                  5      v   M"     g 7fr   r?   r%   r|   s     r   r   rq     s(      HA ""Hr   r   )r   r   r?   r%   r4   r   r6   rC   r/   
GlyphCountrh   rr   r   r   )r$   re   r1   r3   rp   s    `   r   rj   rj   z  s    {{a--&&qxx0&t@#,T__#=Q#=1#=Q&t@G$doo.OO  //$2H2HH 
 	
 	5&44q Rs   +D:D:c                      U R                   S;   $ )Nr         )DeltaFormatr$   s    r   
is_hintingr     s    y((r(   c                 |    S H6  n[        XS 5      nUc  M  UR                  5       (       d  M+  [        X5        M8     g )N)
XPlaDevice
YPlaDevice
XAdvDevice
YAdvDevice)getattrr   delattrr$   namerM   s      r   prune_hintsr     s0    HD%=Q\\^^D Ir(   c                    U R                   S:X  a.  [        U R                  R                  UR                  5      5      $ U R                   S:X  a  U R                  R                  UR                  5      nU R
                  n[        U5      nU Vs/ s H  oUU:  d  M
  X5   PM     snU l        [        U R
                  5      U l        [        U R                  5      $  SU R                   -  5       es  snf )Nr   r   r   )r   r/   r   r?   r%   Value
ValueCountrh   )r$   re   r1   rX   r2   r3   s         r   rj   rj     s    {{a4==''122		--&&qxx0F)0>AIifi>
djj/DOO$$4&44q	 ?s   	C/C/c                 p  ^  T R                   c  T R                  S:X  d   egT R                  S:X  aK  UR                  (       d  T R                   R	                  5         T R                   R                  5       T l        OT R                  S:X  a  S T R                   ;   a6  T R                  S:X  d   e[        S T R                    5       5      (       d   eO|UR                  (       d#  T R                    H  nUR	                  5         M     [        [        R                  T R                    Vs/ s H  o3R                  5       PM     snS5      T l        T R                  S:X  aS  [        U 4S jT R                    5       5      (       a/  ST l        T R                  S:w  a  T R                   S   OS T l         T ?
gs  snf )Nr   Tr   r   c              3   (   #    U  H  oS L v   M
     g 7fr   r   r   rM   s     r   r   $prune_post_subset.<locals>.<genexpr>  s     5*QDy*s   c              3   F   >#    U  H  oTR                   S    :H  v   M     g7fr   N)r   )r   rM   r$   s     r   r   r     s     GJqTZZ] 2Js   !)r   ValueFormatr   hintingr   getEffectiveFormatrr   r   int__or__r   )r$   r&   optionsrM   s   `   r   prune_post_subsetr     sJ   zz1$$$ {{aJJ""$::88:		4::##q(((5$**55555??AMMO $%

TZZHZ113ZH! D
 {{aCGDJJGGG&*&6&6!&;TZZ]
O Is   )F3
c                    U R                   S:X  Gah  U R                  R                  UR                  5      nU R                  n[        U5      nU Vs/ s H  oUU:  d  M
  X5   PM     snU l        U R                   HZ  nUR                   Vs/ s H   owR                  UR                  ;   d  M  UPM"     snUl        [        UR                  5      Ul        M\     [        U R                  5       VVs/ s H  u  pVUR                  (       d  M  UPM     nnnU R                  R                  U5        [        U R                  U5      U l        [        U R                  5      U l        [        U R                  5      $ U R                   S:X  Ga  U R                  R                  UR                  R                  U R                  R                  5      SS9 Vs/ s H  nXR                   :  d  M  UPM     n	nU R"                  R                  UR                  SSS9 Vs/ s H  nXR$                  :  d  M  UPM     n
nU	 Vs/ s H  oPR&                  U   PM     snU l        U R&                   H'  nU
 Vs/ s H  oXR(                  U   PM     snUl        M)     [        U	5      U l        [        U
5      U l        [        U R                   =(       a;    U R$                  S:  =(       a%    U R                  R                  UR                  5      5      $  SU R                   -  5       es  snf s  snf s  snnf s  snf s  snf s  snf s  snf )Nr   r   TrC   F)rC   rY   r   )r   r   r?   r%   PairSetr/   PairValueRecordSecondGlyphPairValueCountr6   rC   r4   PairSetCountrh   	ClassDef1intersectionClass1Count	ClassDef2Class2CountClass1RecordClass2Record)r$   re   r1   pairsr2   r3   prr}   
class1_map
class2_maps              r   rj   rj     s   {{a--&&qxx0E
*1?'QY'?A,,!,a0I,!A  #1#4#45A	  "+4<<!8M!8A<L<L1!8MG$#DLL':-D%%&&		 ^^**%%dmm&:&:;4 + 
 ###	  	 
 ^^**18845*Q
Q### Q 	 

 <FF:a..q1:F""A9CDAnnQ/DAN #z?z? /!!A%/$$QXX.
 	
 	5&44qK @!
 N


 GDsH   	LLL$-L$1L)L)L/+L/L41L4=L90L>c                 X   UR                   (       d  SSS.U R                     u  p4S=U l        U l        [	        X5       H  n[	        XT5       H  nUR
                  (       aG  UR
                  R                  5         U =R                  UR
                  R                  5       -  sl        UR                  (       d  Mn  UR                  R                  5         U =R                  UR                  R                  5       -  sl        M     M     [        U R                  U R                  -  5      $ )N)r   r   )r   r   r   r   r   )
r   r   ValueFormat1ValueFormat2r   Value1r   r   Value2rh   )r$   r&   r   attr1attr2rowr   s          r   r   r     s    ??-/
 ++
 121D-4'CS(88HH((*%%)D)D)FF%888HH((*%%)D)D)FF% ) ( !!D$5$5566r(   c                 l   U R                   S:X  a  U R                  R                  UR                  5      nU R                  n[        U5      nU Vs/ s H  oUU:  d  M
  X5   PM     snU l        [        U R                  5      U l        [        U R                  5      $  SU R                   -  5       es  snf Nr   r   )r   r   r?   r%   EntryExitRecordr/   EntryExitCountrh   )r$   re   r1   recordsr2   r3   s         r   rj   rj     s    {{a--&&qxx0&&G4;IGq5y

GI!$"6"67D''((4&44q	  Js   	B1B1c                    U R                   S:X  a  SU l         g U R                   S:X  aa  S H7  n[        XS 5      nUc  M  UR                  5       (       d  M+  [        XS 5        M9     U R                  c  U R
                  c  SU l         g g g g )Nr   r   r   )XDeviceTableYDeviceTable)r   r   r   setattrr   r   r   s      r   r   r     s~    {{a		4DD)A}D) 5 $):):)BDK *C$ 
r(   c                     UR                   (       dk  U R                   H[  nUR                  (       a  UR                  R                  5         UR                  (       d  MA  UR                  R                  5         M]     gNT)r   r   EntryAnchorr   
ExitAnchor)r$   r&   r   recs       r   r   r   (  sN    ??''C++-~~~**,	 (
 r(   c                 H   U R                   S:X  Ga  U R                  R                  UR                  5      n[	        U R
                  R                  U5      U R
                  l        [        U R
                  R                  5      U R
                  l        U R                  R                  UR                  5      n[	        U R                  R                  U5      U R                  l        [        U R                  R                  5      U R                  l        [        S U R
                  R                   5       5      n[        U5      U l        U R
                  R                   H#  nUR                  UR                   5      Ul        M%     U R                  R                   H  n[	        UR"                  U5      Ul        M      [%        U R                  =(       a3    U R
                  R                  =(       a    U R                  R                  5      $  SU R                   -  5       e)Nr   c              3   8   #    U  H  oR                   v   M     g 7fr   Classr   s     r   r   rq   A       "N4Mq774M   r   )r   MarkCoverager?   r%   r4   	MarkArray
MarkRecordr/   	MarkCountBaseCoverage	BaseArray
BaseRecord	BaseCountr   
ClassCountr[   r   
BaseAnchorrh   )r$   re   mark_indicesbase_indicesclass_indicesmbs          r   rj   rj   3  sz   {{a((//9$0NN%%|%
! $'t~~'@'@#A ((//9$0NN%%|%
! $'t~~'@'@#A ""NDNN4M4M"NNm,**A#))!''2AG +**A'mDAL +OOU 8 8UT^^=U=U
 	
 	5&44qr(   c                 L   UR                   (       d  U R                  R                   H0  nUR                  (       d  M  UR                  R	                  5         M2     U R
                  R                   H/  nUR                   H  nU(       d  M  UR	                  5         M     M1     gr   )r   r   r   
MarkAnchorr   r   r   r   )r$   r&   r   r   r   as         r   r   r   N  sm    ??**A|||((* + **A\\1MMO " + r(   c                 x   U R                   S:X  Ga  U R                  R                  UR                  5      n[	        U R
                  R                  U5      U R
                  l        [        U R
                  R                  5      U R
                  l        U R                  R                  UR                  5      n[	        U R                  R                  U5      U R                  l        [        U R                  R                  5      U R                  l        [        S U R
                  R                   5       5      n[        U5      U l        U R
                  R                   H#  nUR                  UR                   5      Ul        M%     U R                  R                   H6  nUc  M  UR"                   H  n[	        UR$                  U5      Ul        M      M8     ['        U R                  =(       a3    U R
                  R                  =(       a    U R                  R                  5      $  SU R                   -  5       e)Nr   c              3   8   #    U  H  oR                   v   M     g 7fr   r   r   s     r   r   rq   i  r   r   r   )r   r   r?   r%   r4   r   r   r/   r   LigatureCoverageLigatureArrayLigatureAttachLigatureCountr   r   r[   r   ComponentRecordLigatureAnchorrh   )r$   re   r   ligature_indicesr   r   r0   r}   s           r   rj   rj   [  s   {{a((//9$0NN%%|%
! $'t~~'@'@#A 0077A,8--/?-
) ,/t/A/A/P/P+Q(""NDNN4M4M"NNm,**A#))!''2AG +##22Ay&&#/0@0@-#P  ' 3
 OO 1((1""00
 	
 	5&44qr(   c                 |   UR                   (       d  U R                  R                   H0  nUR                  (       d  M  UR                  R	                  5         M2     U R
                  R                   HG  nUc  M  UR                   H/  nUR                   H  nU(       d  M  UR	                  5         M     M1     MI     gr   )	r   r   r   r   r   r   r   r   r   )r$   r&   r   r   r0   r}   r   s          r   r   r   {  s    ??**A|||((* + ##22Ay&&))Aq * ' 3 r(   c                 H   U R                   S:X  Ga  U R                  R                  UR                  5      n[	        U R
                  R                  U5      U R
                  l        [        U R
                  R                  5      U R
                  l        U R                  R                  UR                  5      n[	        U R                  R                  U5      U R                  l        [        U R                  R                  5      U R                  l        [        S U R
                  R                   5       5      n[        U5      U l        U R
                  R                   H#  nUR                  UR                  5      Ul        M%     U R                  R                   H  n[	        UR                   U5      Ul        M      [#        U R                  =(       a3    U R
                  R                  =(       a    U R                  R                  5      $  SU R                   -  5       e)Nr   c              3   8   #    U  H  oR                   v   M     g 7fr   r   r   s     r   r   rq     s     "O4Nq774Nr   r   )r   Mark1Coverager?   r%   r4   
Mark1Arrayr   r/   r   Mark2Coverage
Mark2ArrayMark2Recordr   r   r[   r   Mark2Anchorrh   )r$   re   mark1_indicesmark2_indicesr   r   r   s          r   rj   rj     sz   {{a**11!((;%1OO&&&
" %((B(B$C!**11!((;&2OO'''
# %((C(C$D!""ODOO4N4N"OOm,++A#))!''2AG ,,,A(FAM -OOW 9 9Wdoo>W>W
 	
 	5&44qr(   c                 L   UR                   (       d  U R                  R                   H0  nUR                  (       d  M  UR                  R	                  5         M2     U R
                  R                   H/  nUR                   H  nU(       d  M  UR	                  5         M     M1     gr   )r   r  r   r   r   r  r	  r
  )r$   r&   r   r   r   s        r   r   r     sm    ??++A|||((* , ,,A]]1MMO # - r(   c                     g r   r   r$   lookup_indicess     r   subset_lookupsr    s     	r(   c                     / $ r   r   r   s    r   collect_lookupsr    s	     Ir(   c                     gr   r   r$   r&   r   s      r   r   r     s     r(   c                     g)NFr   r   s    r   may_have_non_1to1r    s     r(   c                     gr   r   r   s    r   r  r    s     r(   c                     " S S[         5      nU R                  S;  a  g [        U R                  S5      (       d  0 U R                  l        U R                  U R                  R                  ;  a?  U" U R                  U R                  5      nX R                  R                  U R                  '   U R                  R                  U R                     $ )Nc                       \ rS rSrS rSrg)0__subset_classify_context.<locals>.ContextHelperi  c                    UR                   R                  S5      (       a  SnSnOSnSnUR                   R                  S5      (       a  SnSnSnOSnSnSnXS-   nX0l        X@l        XPl        Xl        X`l        Xpl        US	-   U l	        US:X  a  S
 n	S n
S nS nS nS nS nS nS nS nOPUS:X  a  S n	S n
S nS nS nS nS nS nS nS nO+US:X  a  S n	S n
S nS nS nS nS nS  nS! nS" nO
 S#U-  5       eU(       a!  Xl
        Xl        Xl        UU l        UU l        OXl
        Xl        Xl        Xl        UU l        US:X  a1  US$-   U l        US%-   U l        US&-   U l        US'-   U l        S( U l        g US:X  aa  US)-   U l        US*-   U l        US+-   U l        US,-   U l        S- U l        U(       a  S.OS/U l        U(       a  SOSU l        U(       a  S0OS1U l        g US:X  a  U(       a  S2OS3U l        g g )4NSubstSubPosChainr   r    r   LookupRecordc                     U R                   $ r   r   r   s    r   <lambda>K__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.<lambda>      QZZr(   c                     U R                   $ r   r$  r%  s    r   r&  r'        !**r(   c                     g)Nr   r   r%  s    r   r&  r'    s    r(   c                     g)N)NNNr   r%  s    r   r&  r'    s    -?r(   c                     U R                   4$ r   )Inputr%  s    r   r&  r'    
    aggZr(   c                 H    U R                   U R                  U R                  4$ r   	Backtrackr.  	LookAheadr%  s    r   r&  r'        1;;*Mr(   c                 6    Uu  U l         S U 5       u  U l        g )Nc              3   >   #    U  H  n[        U5      S -   v   M     g7fr   Nr.   r   xs     r   r   a__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.SetRuleData.<locals>.<genexpr>#       &=1as1vz1   )r.  r   r   r+   s     r   SetRuleDataN__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.SetRuleData!      !"JQW&=1&=OQ\r(   c                     Uu  U l         U l        U l        [        US   5      [        US   5      S-   [        US   5      sU l        U l        U l        g Nr   r   r   r2  r.  r3  r/   BacktrackGlyphCountInputGlyphCountLookAheadGlyphCountr=  s     r   ChainSetRuleDataS__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.ChainSetRuleData%  P    :;7Q[!'1;
 QqTC!IM3qt9	-)-r(   r   c                     U R                   $ r   r$  r%  s    r   r&  r'  .  r(  r(   c                     U R                   $ r   r$  r%  s    r   r&  r'  /  r*  r(   c                     U R                   4$ r   ClassDefr%  s    r   r&  r'  0  s
    r(   c                 H    U R                   U R                  U R                  4$ r   BacktrackClassDefInputClassDefLookAheadClassDefr%  s    r   r&  r'  1  s     ''OO''.r(   c                     Uu  U l         g r   rM  r=  s     r   SetContextDataQ__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.SetContextData7  s    $%MQZr(   c                 .    Uu  U l         U l        U l        g r   rP  r=  s     r   SetChainContextDataV__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.SetChainContextData:  s    RSOQ(!/1;Nr(   c                     U R                   4$ r   r   r%  s    r   r&  r'  =  r/  r(   c                 H    U R                   U R                  U R                  4$ r   r1  r%  s    r   r&  r'  >  r4  r(   c                 6    Uu  U l         S U 5       u  U l        g )Nc              3   >   #    U  H  n[        U5      S -   v   M     g7fr7  r.   r8  s     r   r   r:  B  r;  r<  )r   r   r=  s     r   r>  r?  @  r@  r(   c                     Uu  U l         U l        U l        [        US   5      [        US   5      S-   [        US   5      sU l        U l        U l        g rB  rC  r=  s     r   rG  rH  D  rI  r(   c                      U R                   S   $ Nr   r$  r%  s    r   r&  r'  M  s    QZZ]r(   c                      U R                   S   $ r`  )InputCoverager%  s    r   r&  r'  N  s    !//!*<r(   c                     U R                   $ r   r$  r%  s    r   r&  r'  S  r(  r(   c                 N    U R                   U R                  -   U R                  -   $ r   )r   rb  r   r%  s    r   r&  r'  T  s    ''!//9A<O<OOr(   c                 6    Uu  U l         S U 5       u  U l        g )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr   r.   r8  s     r   r   r:  Z  s     &9q!s1vvqr   )r   r   r=  s     r   r>  r?  X  s    $%MQZ&9q&9OQ\r(   c                 f    Uu  U l         U l        U l        S U 5       u  U l        U l        U l        g )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr   r.   r8  s     r   r   f__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.ChainSetRuleData.<locals>.<genexpr>b  s     +AQr   )r   rb  r   rD  rE  rF  r=  s     r   rG  rH  \  s7    RSOQ(!/1;N
 ,+	-)-r(   r   Rule	RuleCountRuleSetRuleSetCountc                     X ;   a  U/$ / $ r   r   r%   r}   r   s      r   r&  r'  y  s    Q[qc6Pb6Pr(   	ClassRuleClassRuleCountClassSetClassSetCountc                 h    U(       a  UR                  X5      $ US:X  a  [        U 5      $ [        5       $ r`  )rS   r;   ro  s      r   r&  r'    s6     %%f0 <)*a#f+<58U<r(   rR  rN  r.  r   rb  r   )__name__endswith
startswithTypTyper   ChainTypInputIdxDataLenr"  r   ContextDatarU  RuleDatar>  rj  rk  rl  rm  	IntersectrN  ClassDefIndexr.  )r$   rR   r   rx  ry  r   r{  r|  rz  r   ChainCoverager}  ChainContextDatarU  rX  r~  ChainRuleDatar>  rG  s                      r   __init__9__subset_classify_context.<locals>.ContextHelper.__init__  sZ   ~~&&w//~~((11{HHIJ$M$M"L $~ 5D{/ 4/#? !%&*#/ M>> 1/ 45$ &T 0 M>> 12 <"#' !%&*#/!:, 8.77q -#3 &9# -#3  (#. &4# (#. {$v-	!)K!7')3$,~$=!!P1${2	!),<!<'*4$,$>!" 49j*/QQ"(-W7
105_:
 r(   )r   rz  rN  r  r}  r   r|  r.  r{  r  r"  rj  rk  r~  rl  rm  rU  r>  rx  ry  N)ru  
__module____qualname____firstlineno__r  __static_attributes__r   r(   r   ContextHelperr    s	    L	Fr(   r  r   _subset__ContextHelpers)objectr   hasattr	__class__r  )r$   r  helpers      r   __subset_classify_contextr    s    MF MF^ {{)#4>>#<==13.{{$..@@@t~~t{{;>D..t{{;>>11$++>>r(   c                   ^^ U R                  5       mTR                  U 5      R                  U5      nU(       d  / $ TR                  U 5      R                  U5      nU R                  S:X  Ga  TR                  U 5      n[        U TR                  5      n[        U TR                  5      nU GH  nXv:  d	  XW   (       d  M  [        XW   TR                  5       GHh  nU(       d  M  [        UU4S j[        UTR                  U5      5       5       5      (       d  MC  [        5       n	[        UTR                  5       GH   n
U
(       d  M  U
R                  nX;   a  S nOKUS:X  a)  [!        TR                  U 5      R"                  U   /5      nO[!        UR$                  US-
     /5      nTR&                  R(                  R*                  U
R,                     nU	R/                  U5        UR1                  5       (       a1  U	R3                  [5        U[7        UR$                  5      S-   5      5        UR9                  TUS9  GM     GMk     GM     g U R                  S:X  Ga$  [        U TR:                  5      nUR                  U5      nTR                  U 5      n[        U TR                  5      n[        U TR                  5      nU GH  nXv:  d	  XW   (       d  M  [        XW   TR                  5       GH  nU(       d  M  [        UU4S j[        UTR                  U5      5       5       5      (       d  MC  [        5       n	[        UTR                  5       GH  n
U
(       d  M  U
R                  nX;   a  S nO`US:X  a  [!        UR=                  X'5      5      nO?[!        UR=                  TR"                  [        UTR$                  5      US-
     5      5      nTR&                  R(                  R*                  U
R,                     nU	R/                  U5        UR1                  5       (       a;  U	R3                  [5        U[7        [        UTR$                  5      5      S-   5      5        UR9                  TUS9  GM"     GM     GM     g U R                  S:X  GaJ  [        U4S jTR                  U 5       5       5      (       d  / $ U n[        UTR$                  5      n[        5       n	[        UTR                  5       H  n
U
(       d  M  U
R                  nX;   a  S nO8US:X  a  [!        U5      nO&[!        X   R                  TR"                  5      5      nTR&                  R(                  R*                  U
R,                     nU	R/                  U5        UR1                  5       (       a'  U	R3                  [5        U[7        U5      S-   5      5        UR9                  TUS9  M     g  S	U R                  -  5       e)
Nr   c              3   Z   >^#    U  H  u  mn[        UUU4S  jU 5       5      v   M!     g7f)c              3   ^   >#    U  H"  nTR                  TR                  TU5      v   M$     g 7fr   r  r%   r   kr}   cdre   s     r   r   r~     %     DeAHHb!44e   *-Nrr   r   klistr  r}   re   s     @r   r   r`     *      %D	E DeDDD%D   '+r   r   )r_   c              3   Z   >^#    U  H  u  mn[        UUU4S  jU 5       5      v   M!     g7f)c              3   ^   >#    U  H"  nTR                  TR                  TU5      v   M$     g 7fr   r  r  s     r   r   r~     r  r  Nr  r  s     @r   r   r`     r  r  r   c              3   n   >#    U  H*  oS L=(       a    UR                  TR                  5      v   M,     g 7fr   r>   r   r9  re   s     r   r   r`     s*     UDTqD=:Q[[%::DT   25r   )r  r   r7   r<   r   r}  r   rl  rm  rj  rr   zipr~  r;   r"  SequenceIndex	frozensetr%   r.  table
LookupListLookupLookupListIndexaddr  rb   ranger/   rf   rN  rS   )r$   re   r_   r1   r}  rssrssCountr3   r   chaosllseqi
pos_glyphslookuprN  input_coveragesr}   s    `              @r   rf   rf     s   &&(Ajj((4G	D!22:>J{{ammD)dAII&40A}CFSVQVV, %(ajjm%D   !!Q^^4B ++D}%)
19)2AJJt4D4K4KA4N3O)PJ)2AGGD1H4E3F)GJWW//66r7I7IJFIIdO//11U4QWW1A%BC))!
)C! 5 - : 
	4,$$Z0mmD)dAII&40A}CFSVQVV, %(ajjm%D   !!Q^^4B ++D}%)
19)2 ( 8 8 G*J *3 ( 8 8$%HHga.A$(.K!"*J
 WW//66r7I7IJFIIdO//11U4WQ5H1IA1M%NO))!
)C- 5 - F 
	UAJJtDTUUUI!!QWW-!Q^^,B##D}!
19!*:!6J!*'->>qxxH"J WW''..r/A/ABFIIdO''))U4_)=)ABC!!!
!;% -( 	5&44qr(   c                 ^
  ^ U R                  5       nU R                  S:X  Ga  U R                  R                  TR                  5      n[        XR                  5      n[        XR                  5      nU Vs/ s H  ofU:  d  M
  XF   PM     nnU H  nU(       d  M  [        XrR                  5      nU V	s/ s H9  n	U	(       d  M  [        U4S jUR                  U	5       5       5      (       d  M7  U	PM;     nn	[        XrR                  U5        [        XrR                  [        U5      5        M     [        U5       VVs/ s H,  u  pgU(       d  M  [        XrR                  5      (       d  M*  UPM.     nnnU R                  R                  U5        [!        XC5      n[        XR                  U5        [        XR                  [        U5      5        [#        U5      $ U R                  S:X  Ga  U R                  R                  TR                  5      (       d  gUR%                  U 5      n
U
 Vs/ s H%  o(       a  UR                  TR                  SS9OS PM'     nnXR&                     n[        XR                  5      n[        XR                  5      nU Vs/ s H  ofU:  d  M
  XF   PM     nnA[        XR(                  5      R+                  U R                  R                  5      n[        U5       VVs/ s H  u  pdXc;   a  UOS PM     snnnU GH  nU(       d  M  [        XrR                  5      nU V	s/ s H?  n	U	(       d  M  [        S [-        XR                  U	5      5       5       5      (       d  M=  U	PMA     nn	[        XrR                  U5        [        XrR                  [        U5      5        U Hc  n	UR/                  U	[-        XR                  U	5      5       VVVs/ s H&  u  pU Vs/ s H  oR1                  U5      PM     snPM(     snnn5        Me     GM     U Vs/ s H'  ow(       a  [        XrR                  5      (       a  UOS PM)     nnU(       a  US   c  US	 U(       a  US   c  M  [        XR                  U5        [        XR                  [        U5      5        [#        U5      $ U R                  S	:X  a$  [        U4S
 jUR                  U 5       5       5      $  SU R                  -  5       es  snf s  sn	f s  snnf s  snf s  snf s  snnf s  sn	f s  snf s  snnnf s  snf )Nr   c              3   N   >#    U  H  n[        U4S  jU 5       5      v   M     g7f)c              3   @   >#    U  H  oTR                   ;   v   M     g 7fr   rA   )r   r   re   s     r   r   *subset_glyphs.<locals>.<genexpr>.<genexpr>  s     95aM5rJ   Nr  )r   glistre   s     r   r   rq     s     U}e95999}s   "%r   FTr   c              3   T   ^#    U  H  u  mn[        U4S  jU 5       5      v   M     g7f)c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   )r   r  	klass_maps     r   r   r  A  s     61Ys   Nr  )r   r  r  s     @r   r   rq   @  s+      ,J(	5 6666,Js   %(r   c              3   n   >#    U  H*  oS L=(       a    UR                  TR                  5      v   M,     g 7fr   r   r  s     r   r   rq   `  s*     RAQAD=7QXXahh%77AQr  r   )r  r   r   r?   r%   r   rl  rm  rj  rr   r~  r   rk  r/   r6   rC   r4   rh   r}  r  rN  r7   r  r>  r[   )r$   re   r}   r1   r  r  r3   rsssr   r}  r9  
klass_mapsr  r  r  s    `              r   rj   rj     s0    	&&(A{{a--&&qxx0dII&40&7w!h,vsvw7BVV$B A  UqzzRS}UU    B#BSW-  #,C.O.B172vv;N1.OG$3(ii%nnc#h/Cy		}}##AHH--mmD)CN
CNaaAHHQXXTH*T9; 	 

 __-dII&40&7w!h,vsvw7$

+55dmm6J6JK;DS>J>als,>JBVV$B A   ,/
JJqM,J     B#BSW-  14J

10N0N,I 6;;U+U;0N # 6 EHHCbRGB//rT9CHc"goB c"goii%nnc#h/ Cy		RDAQRRR4&44qa 8
 P
 8 K" < Isx   6	S9S94S>'S>.S>=TT*T*,T		T!T2T3T-T3TT#+TT#".T*T#c                    U R                  5       nU R                  S;   a  [        XR                  5       H  nU(       d  M  [        X2R                  5       H  nU(       d  M  [        UUR                  [        XBR                  5       Vs/ s H   nU(       d  M  UR                  U;   d  M  UPM"     sn5        [        XBR                  5       H,  nU(       d  M  UR                  UR                  5      Ul        M.     M     M     g U R                  S:X  a  [        U UR                  [        XR                  5       Vs/ s H   nU(       d  M  UR                  U;   d  M  UPM"     sn5        [        XR                  5       H,  nU(       d  M  UR                  UR                  5      Ul        M.     g  SU R                  -  5       es  snf s  snf Nr   r   r   )	r  r   r   rl  rj  r   r"  r  r[   )r$   r  r}   r  r   r  s         r   r  r  e  s    	&&(A{{f$		*BR(NN #*!^^"<"<B "$"4"4"F "< "!^^4B )7)=)=b>P>P)QB& 5 ) +& 
	NN "$77B ,,> 7	
 $/B!/!5!5b6H6H!IB 0
 	5&44q3s$   GG,G?GG Gc           
      $   U R                  5       nU R                  S;   a  [        XR                  5       VVVs/ s Hd  nU(       d  M  [        X!R                  5        H>  nU(       d  M  [        X1R
                  5        H  nU(       d  M  UR                  PM     M@     Mf     snnn$ U R                  S:X  a8  [        XR
                  5       Vs/ s H  oD(       d  M  UR                  PM     sn$  SU R                  -  5       es  snnnf s  snf r  )r  r   r   rl  rj  r"  r  )r$   r}   r  r   r  s        r   r  r    s     	&&(A{{f dII.
.  R(	 
 a0 B
 1  ) .
 	
 
	-4T>>-JQ-Jrb"""-JQQ4&44q
 Rs#   D	D+DD
DDc                     U R                   S:X  a  U R                  R                  X5        g  SU R                   -  5       er   )r   ExtSubTablerf   rd   s      r   rf   rf     s6    {{a''64&44qr(   c                 ~    U R                   S:X  a  U R                  R                  5       $  SU R                   -  5       er   )r   r  r  r   s    r   r  r    s7    {{a11334&44qr(   c                     U R                   S:X  a  U R                  R                  U5      $  SU R                   -  5       er   )r   r  rj   r$   re   s     r   rj   rj     s9    {{a--a004&44qr(   c                     U R                   S:X  a  U R                  R                  X5      $  SU R                   -  5       er   )r   r  r   r  s      r   r   r     s9    {{a11$@@4&44qr(   c                     U R                   S:X  a  U R                  R                  U5      $  SU R                   -  5       er   )r   r  r  r  s     r   r  r    s9    {{a..~>>4&44qr(   c                 ~    U R                   S:X  a  U R                  R                  5       $  SU R                   -  5       er   )r   r  r  r   s    r   r  r    s7    {{a//114&44qr(   c                    Uc  [        UR                  5      n[        U 5      nUR                  nUR	                  US5      u  pVU[        UR                  5      :w  a%  [        UR                  5      [        5       4=u  pVXC'   UR                  U5      (       a  g UR                  U5        U R                   H  nU(       d  M  UR                  X5        M     g )Nr   )r  r%   id_doneLookupsgetr/   r;   issubsetrb   SubTablerf   )r$   re   r_   keydoneLookupsr2   coveredsts           r   rf   rf     s    qxx(
 T(C..K __S)4NEAHH-0]CE,BB)7##NN:mm
!( r(   c                    U R                    Vs/ s H%  o"(       d  M  UR                  U5      (       d  M#  UPM'     snU l         [        U R                   5      U l        [	        U S5      (       an  U R
                  ba  U R
                  UR                  ;  a  S U l        U =R                  S-  sl        O*UR                  R                  U R
                  5      U l        [        U R                  5      $ s  snf )NMarkFilteringSeti)
r  rj   r/   SubTableCountr  r  used_mark_sets
LookupFlagr[   rh   )r$   re   r  s      r   rj   rj     s    "&--N-B2R":J:J1:MR-NDMT]]+Dt'((T-B-B-N  (8(88$(D!OOu$O$%$4$4$:$:4;P;P$QD!""## Os   
C1C1C1c                 v    SnU R                    H&  nU(       d  M  UR                  X5      (       d  M$  SnM(     U$ NFT)r  r   )r$   r&   r   retr  s        r   r   r     s8    
Cmm..C	 
 Jr(   c                 L    U R                    H  nUR                  U5        M     g r   )r  r  )r$   r  re   s      r   r  r  
  s    ]]	( r(   c                 <    [        S U R                   5       / 5      $ )Nc              3   R   #    U  H  o(       d  M  UR                  5       v   M     g 7fr   )r  r   r  s     r   r   "collect_lookups.<locals>.<genexpr>  s!     C}$""$$}   
'')sumr  r   s    r   r  r    s    Ct}}CRHHr(   c                 :    [        S U R                   5       5      $ )Nc              3   R   #    U  H  o(       d  M  UR                  5       v   M     g 7fr   )r  r  s     r   r   $may_have_non_1to1.<locals>.<genexpr>  s!     D"%r##%%r  )rK   r  r   s    r   r  r    s    DDDDr(   c                     [        U R                  5       VVs/ s H(  u  p#U(       d  M  UR                  U5      (       d  M&  UPM*     snn$ s  snnf )z(Returns the indices of nonempty lookups.)r6   r  rj   )r$   re   r3   r0   s       r   rj   rj     s8     $DKK0M0$!AA!//!:LA0MMMs   AAAc                 v    SnU R                    H&  nU(       d  M  UR                  X5      (       d  M$  SnM(     U$ r  )r  r   )r$   r&   r   r  r0   s        r   r   r      s8    
C[[t--C	 
 Jr(   c                    U R                  5         U Vs/ s H#  o"U R                  :  d  M  U R                  U   PM%     snU l        [        U R                  5      U l        U R                   H  nUR	                  U5        M     g s  snf r   )ensureDecompiledLookupCountr  r/   r  r$   r  r3   r0   s       r   r  r  +  sl    +9R>aAQAQ=Q>4;;q>>RDK4;;'D[[	(  Ss
   BBc                     U R                  5         [        U R                  5       VVs/ s H  u  p#X!;   a  UOSPM     snnU l        gs  snnf z+Sets lookups not in lookup_indices to None.N)r  r6   r  r  s       r   neuter_lookupsr  4  sF     	7@7M7MtqQ d*7MDK s   Ac                   ^  [        U5      nUn [        U 4S jU 5       / 5      nU Vs/ s H  nXA;  d  M
  UT R                  :  d  M  UPM      nnU(       d  [        U5      $ [        U5      nUR                  U5        UnMs  s  snf )zBReturns sorted index of all lookups reachable from lookup_indices.c              3      >#    U  H3  oTR                   :  d  M  TR                  U   R                  5       v   M5     g 7fr   )r  r  r  r   s     r   r   "closure_lookups.<locals>.<genexpr>D  s3     Ww!dFVFVBV-T[[^++--ws   >$>)r   r  r  extend)r$   r  recurserecurse_lookupsr0   s   `    r   closure_lookupsr  =  s      /NG
WwW
 %
$& +,t/?/?+? $ 	 

 n--$_5o.! 

s   	BB	Bc                 j   U R                    Vs/ s H  o"U;   d  M
  UPM     snU l         U R                    Vs/ s H  o!R                  U5      PM     snU l         [        U R                   5      U l        U R                  =(       d$    [	        U R
                  [        R                  5      $ s  snf s  snf )z1"Returns True if feature is non-empty afterwards.)r  r[   r/   r  
isinstanceFeatureParamsr   FeatureParamsSize)r$   r  r0   s      r   r  r  S  s     (,';';S';!N?RA';SD=A=Q=QR=Q003=QRD4//0D  zH66   TRs   	B+B+B0c                     [        U R                  5       VVs/ s H9  u  p#UR                  R                  U5      (       d  UR                  S:X  d  M7  UPM;     snn$ s  snnf ))Returns the indices of nonempty features.pref)r6   FeatureRecordFeaturer  
FeatureTag)r$   r  r3   fs       r   r  r  b  sV     d0011DAII$$^448N 	
1  s   6AAc                 0   ^  [        U 4S jU 5       / 5      $ )Nc              3      >#    U  H:  nUTR                   :  d  M  TR                  U   R                  R                  v   M<     g 7fr   )FeatureCountr   r  r  r   s     r   r   r  s  s?      	
$4$$$ :Dq!))99$s
   A*A)r  r$   feature_indicess   ` r   r  r  p  s"    	
$	

 	 r(   c                     U R                  5         [        U R                  U5      U l        [        U R                  5      U l        [        U R                  5      $ r   )r  r4   r   r/   r  rh   r  s     r   subset_featuresr
  |  sG    %d&8&8/JDD../D!!""r(   c                     U R                    Vs/ s H1  nUR                  R                  U5      (       d  M%  UR                  PM3     sn$ s  snf )r  )SubstitutionRecordr  r  FeatureIndex)r$   r  r   s      r   r  r    sG    
 (((A99##N3 	(  s
   $A
A
c                 D   ^ [        U4S jU R                   5       / 5      $ )r  c              3   Z   >#    U  H   nUR                   R                  T5      v   M"     g 7fr   )FeatureTableSubstitutionr  )r   r  r  s     r   r   !subset_lookups.<locals>.<genexpr>  s,      	
0 &&55nEE0r   r  FeatureVariationRecordr  s    `r   r  r    s*     	
00	
 	 r(   c                 D   ^ [        U4S jU R                   5       / 5      $ )Nc              3      >#    U  HK  nUR                   R                    H-  nUR                  T;   d  M  UR                  R                  v   M/     MM     g 7fr   )r  r  r  r  r  )r   vrr   r  s      r   r   r    sI      	
100CC~~0 &AII%%C &1s
   .A!Ar  r  s    `r   r  r    s(    	
11	
 	 r(   c                 V   U R                  5         U R                   Vs/ s H  o"R                  U;   d  M  UPM     snU l        U R                   H#  nUR                  UR                  5      Ul        M%     [	        U R                  5      U l        [        U R
                  5      $ s  snf r   )r  r  r  r[   r/   SubstitutionCountrh   r$   r  r   s      r   r
  r
    s    ***ann.O*D $$(..q~~> % !8!89D&&''s
   B&B&c                    U R                  5         U R                   H  nUR                  R                  U5        M      U R                  (       a}  U R                  S   R                  R                  (       dU  U R                  R                  5         U R                  (       a*  U R                  S   R                  R                  (       d  MU  [        U R                  5      U l        [        U R                  5      $ )Nr  )	r  r  r  r
  r  popr/   FeatureVariationCountrh   r  s      r   r
  r
    s    ((	""22?C )
 	##++

"
"#4#45 	##'') 	##++

"
"#4#45
 "%T%@%@!AD**++r(   c                    U R                   U;   a!  UR                  U R                   5      U l         OSU l         U R                   Vs/ s H  o"U;   d  M
  UPM     snU l        U R                   Vs/ s H  o"U;   d  M
  UR                  U5      PM     snU l        [        U R                  5      U l        [        U R                  =(       d    U R                   S:g  5      $ s  snf s  snf N  )ReqFeatureIndexr[   r  r/   r  rh   )r$   r  r  s      r   r
  r
    s    ..44T5I5IJ$$($5$5N$5qo9M$5ND +/*;*;*;QO?S a *;D D--.D!!BT%9%9U%BCC Os   	CC0	C$=C$c                     U R                   S S  nU R                  S:w  a  UR                  U R                  5        [        U5      $ r  )r  r   appendr   r  s     r   collect_featuresr#    s?    ''*Ou$t334o&&r(   c                    U R                   (       a.  U R                   R                  U5      (       d  U(       d  S U l         U R                   Vs/ s H&  o3R                  R                  U5      (       d  M$  UPM(     snU l        [	        U R                  5      U l        [        U R
                  =(       d    U R                   5      $ s  snf r   )DefaultLangSysr
  LangSysRecordLangSysr/   LangSysCountrh   )r$   r  keepEmptyDefaultLangSysr0   s       r   r
  r
    s     	##33ODD'"%%%a)B)B?)S%D D../D!!8T%8%899	s   #C5Cc                    U R                    Vs/ s H  oR                  R                  5       PM     nnU R                  (       a)  UR	                  U R                  R                  5       5        [        [        U/ 5      5      $ s  snf r   )r&  r'  r#  r%  r"  r   r  )r$   r0   r  s      r   r#  r#    sg    =A=O=OP=Oyy113=OOPt22CCEFc/2.// Qs   #Bc                    U R                    Vs/ s H;  nUR                  R                  XR                  S:H  5      (       d	  U(       d  M9  UPM=     snU l         [	        U R                   5      U l        [        U R
                  5      $ s  snf )NDFLT)ScriptRecordScriptr
  	ScriptTagr/   ScriptCountrh   )r$   r  retain_emptyre   s       r   r
  r
    sv    
 """A88##O[[F5JKK 	
"D 4,,-D  !!s   8BBc                 N    [        [        S U R                   5       / 5      5      $ )Nc              3   T   #    U  H  oR                   R                  5       v   M      g 7fr   )r.  r#  )r   re   s     r   r   #collect_features.<locals>.<genexpr>  s      R@Q1884466@Qs   &()r   r  r-  r   s    r   r#  r#    s!    cR@Q@QRTVWXXr(   EBLCc                    U R                    H}  nUR                   H6  nUR                   Vs/ s H  oDUR                  ;   d  M  UPM     snUl        M8     UR                   Vs/ s H  oUR                  (       d  M  UPM     snUl        M     U R                    Vs/ s H  oR                  (       d  M  UPM     snU l         gs  snf s  snf s  snf r   )strikesindexSubTablesnamesr%   )r$   re   strikeindexSubTablenr3   s         r   rj   rj     s    ,,#22M.;.A.A"S.A!((]1.A"SM 3,2,A,A M,AqWW,A M   $||@|!/?/?A|@DL	 #T M@s#   CC$C<CC4CEBDTc           
          U R                    VVs/ s H)  o!R                   Vs0 s H  o3U;   d  M
  X2U   _M     snPM+     nnnU Vs/ s H  o"(       d  M  UPM     snU l         gs  snf s  snnf s  snf r   )
strikeDatar%   )r$   re   r:  r   r?  s        r   rj   rj     sp     GKooFUFxx7x!;1Ix7o  
 -7AJ&&vJADO 	8
 Bs&   A)	A$	A$A)
A/A/$A)sbixc                     U R                   R                  5        HC  nUR                   Vs0 s H#  o3UR                  ;   d  M  X2R                  U   _M%     snUl        ME     gs  snf r   )r7  rX   r%   )r$   re   r:  r   s       r   rj   rj     sV    ,,%%'67hhUhv}}BT,MM!,,hU (  Vs   A#A#GSUBc                 |   U R                   Ul         U R                   R                  (       a%  U R                   R                  R                  5       nO/ nU R                   R                  (       a&  U R                   R                  R	                  U5      nO/ n[        U R                   SS 5      (       a'  X0R                   R                  R	                  U5      -  n[        U5      nU R                   R                  (       a  0 Ul	         [        UR                  5      nU H  nXPR                   R                  R                  :  a  M(  U R                   R                  R                  U   (       d  MR  U R                   R                  R                  U   R                  U5        M     XAR                  :X  a  OM  U?	U? g NFeatureVariations)r  
ScriptListr#  FeatureListr  r   rE  r   r  r  r  r%   r  r  rf   )r$   re   r  r  orig_glyphsr3   s         r   rf   rf   &  sD   jjAGzz**//@@Bzz//??Ptzz.55**66FFWW/Nzz#AHH-K#

--999zz,,33A6

%%,,Q/>>qA $ hh&  N	r(   GPOSc                     UR                   Ul        U R                  R                  (       a&  U R                  R                  R	                  U5      nO/ nU R                  U5        gr   )glyphs_gsubedr%   r  r  rj   r  )r$   re   r  s      r   rj   rj   D  sJ    AHzz..<<Q?'r(   c                 H    U R                   [        R                  " S5      :H  $ )NrB  )r  r   getTableClassr   s    r   retain_empty_scriptsrN  O  s     >>U00888r(   c                 F   U R                   R                  (       a%  U R                   R                  R                  U5        U R                   R                  (       a&  U R                   R                  R                  U5      nO/ n[	        U R                   SS5      (       a'  X R                   R
                  R                  U5      -  n[        U5      nU R                   R                  (       a%  U R                   R                  R                  U5        [	        U R                   SS5      (       a%  U R                   R
                  R                  U5        U R                   R                  (       a4  U R                   R                  R                  X R                  5       5        gg)zVRetains specified lookups, then removes empty features, language
systems, and scripts.rE  N)
r  r  r  rG  r   rE  r   r
  rF  rN  )r$   r  r  s      r   r  r  V  s    zz

,,^<zz**00??Otzz.55::77FF~VV 1Ozz

..?tzz.55

$$44_Ezz

--668	
 r(   c                     U R                   R                  (       a&  U R                   R                  R                  U5        ggr  )r  r  r  r  s     r   r  r  m  s.     zz

,,^< r(   c                    U R                   R                  (       a%  U R                   R                  R                  5       nO/ nU R                   R                  (       a&  U R                   R                  R	                  U5      nO/ n[        U R                   SS5      (       a'  X0R                   R                  R	                  U5      -  n[        U5      nU R                   R                  (       a&  U R                   R                  R                  U5      nO/ nU(       a  U R                  U5        gU R                  U5        g)z/Remove (default) or neuter unreferenced lookupsrE  N)r  rF  r#  rG  r  r   rE  r   r  r  r  r  )r$   rC   r  r  s       r   prune_lookupsrR  t  s     zz**//@@Bzz//??Ptzz.55**66FFWW/Nzz..>>~NN+N+r(   c                 T   U R                   R                  (       a  [        U R                   R                  R                  5       VVs/ s H  u  p#UR                  U;   d  M  UPM     nnnU R                   R                  R                  U5        [        U R                   SS 5      (       a%  U R                   R                  R                  U5        O/ nU R                   R                  (       a4  U R                   R                  R                  X@R                  5       5        g g s  snnf rD  )
r  rG  r6   r   r  r
  r   rE  rF  rN  )r$   feature_tagsr3   r  r  s        r   subset_feature_tagsrU    s    zz "$**"8"8"F"FG
G|||+ G 	 

 	

..?4::2D99JJ((88Izz

--668	
 
s   D$"D$c                    0 n[        5       nU Hx  nSU;   a  UR                  S5      OUS4u  pVUR                  UR                  S5      5        UR	                  U[        5       5      R                  UR                  S5      5        Mz     U R
                  R                  (       Ga  U R
                  R                  R                   Vs/ s H  owR                  U;   d  M  UPM     snU R
                  R                  l        [        U R
                  R                  R                  5      U R
                  R                  l
        U R
                  R                  R                   H  nUR                  U;   d  M  SX(R                     ;  d  M)  UR                  R                   V	s/ s H#  n	U	R                  X(R                     ;   d  M!  U	PM%     sn	UR                  l        [        UR                  R                  5      UR                  l        SX(R                     ;  d  M  S UR                  l        M     g g s  snf s  sn	f )N.r      z*   dflt)r;   splitr  ljust
setdefaultr  rF  r-  r/  r/   r0  r.  r&  
LangSysTagr(  r%  )
r$   tagslangsysscript_tagstag
script_taglang_tagre   recordr0   s
             r   subset_script_tagsre    s   G%K14syy~#s

((+,:su-11(..2CD 
 zzzz,,99.
9![[K=WA9.


* -0

0E0E0R0R,S

)jj++88F7*vWEUEU=V/V $]]88/8||w/?/?'@@ 8/+
 .11L1L-M*)9)9!::37FMM0 9 .
/s   	H: H:% H?	H?c                 (   U R                   R                  (       a%  U R                   R                  R                  5       nO/ nU R                   R                  (       a%  U R                   R                  R	                  U5        [        U R                   SS5      (       a%  U R                   R                  R	                  U5        U R                   R                  (       a4  U R                   R                  R	                  XR                  5       5        gg)zRemove unreferenced featuresrE  N)r  rF  r#  rG  r
  r   rE  rN  r  s     r   prune_featuresrg    s     zz**//@@Bzz

..?tzz.55

$$44_Ezz

--668	
 r(   c                     SUR                   ;  a  U R                  UR                   5        SUR                  ;  a  U R                  UR                  5        U R	                  SS9  g)Nr   Fr   T)layout_scriptsre  layout_featuresrU  rR  r  s      r   prune_pre_subsetrk    s\     '((( 6 67
')))  !8!89U#r(   c                 H   U R                   nUR                  (       a  UR                  (       d  g UR                  R                  nUR                  R                   GHB  nUR
                  R                  nU(       d  M#  UR
                  R                  S S   GH  nUR                  n[        UR                  5      [        UR                  5      :w  a  M>  UR                  S:H  UR                  S:H  :w  a  M`  UR                  S:w  a   X$R                     X&R                     :w  a  M  [        [        UR                  5      5       H*  nX$R                  U      X&R                  U      :w  d  M)    M     UR
                  R                  R                  U5        GM     GME     g r  )r  rF  rG  r   r-  r.  r%  r&  r'  r/   r  r   r  remove)r$   r  featuresre   r+   lrr0   r3   s           r   remove_redundant_langsysrp    s;   JJE5#4#4  ..H**HH##((((+B

A1>>"c!..&99!!U*0A0AU0JK  E)--.(;L;L2MM3q~~./NN1-.(>>!;L2MM 0
 &&--b1# ,	 +r(   c                     U R                   nU R                  5         UR                  (       a  UR                  R                  X5        UR                  (       d  S Ul        UR                  (       a   U R                  5         U R                  5         [        US5      (       al  UR                  (       a3  UR                  (       a  UR                  R                  (       d  S Ul        UR                  (       d  UR                  S:X  a  SUl
        g)NrE  i     T)r  rR  r  r   rG  rp  rg  r  rE  r  Versionr$   r&   r   r  s       r   r   r     s    JJE**49  %%' u)**""%"9"9"P"P&*E# &&5==J+F&EMr(   GDEFc                 (   UR                   nU R                  nUR                  (       a  UR                  R                  R	                  U5      n[        UR                  R                  U5      UR                  l        [        UR                  R                  5      UR                  l        UR                  (       aO  UR                  R                  R                  5        VVs0 s H  u  pVXR;   d  M  XV_M     snnUR                  l
        UR                  (       aO  UR                  R                  R                  5        VVs0 s H  u  pVXR;   d  M  XV_M     snnUR                  l
        UR                  (       a  UR                  R                  R	                  U5      nUR                  R                  nU Vs/ s H#  oU:  d  M
  UR                  R                  U   PM%     snUR                  l        [        UR                  R                  5      UR                  l        [!        US5      (       a  UR"                  (       a  UR"                  n	U	R                   H  n
U
(       d  M  U
R	                  U5        M     [%        U	R                  5       VVs/ s H  u  pUR&                  (       d  M  UPM     snnUl        U	R                   Vs/ s H  oR&                  (       d  M  UPM     snU	l        gs  snnf s  snnf s  snf s  snnf s  snf )NMarkGlyphSetsDefT)rK  r  LigCaretListr   r?   r4   r   r/   LigGlyphCountMarkAttachClassDefrG   rL   GlyphClassDef
AttachListr   AttachPointr  rw  r6   r%   r  )r$   re   r%   r  r1   r   rM   r   r3   markGlyphSetscoverager}   s               r   rj   rj   &  sS   __FJJE$$--44V<&253E3E3N3NPW&X#+.u/A/A/J/J+K("55??EEG.
GTQ1;DADG.
  * "00::@@B)
BTQakDADB)
% ""++226:%%00
5<(
5<J+E((+W(
$ '*%*:*:*F*F&G#u())e.D.D..%..Hx' / +4M4J4J*KX*K$!qxxA*KX-:-C-C!P-Cxx!-C!P/.
)
(
 Y!Ps<   $K83K8K>K><	L	LL	4L	L)Lc                 |   SU ;  a  g U S   nUR                   n[        US5      (       d  g UR                  n[        5       nUR	                  U5        SU ;   a  U S   R                   R	                  U5        UR                  U5      nUR                  U5        SU ;   a  U S   R                   R                  U5        g g )Nru  VarStorerI  )r  r  r  r;   collect_device_varidxessubset_varidxesremap_device_varidxes)r&   gdefr  storeusedVarIdxes
varidx_maps         r   
_pruneGDEFr  I  s    T<DJJE5*%%NNE5L 
!!,/~V22<@ &&|4J 

+~V00< r(   c                 B   U R                   nUR                  (       a"  UR                  R                  (       d  S Ul        UR                  (       a"  UR                  R                  (       d  S Ul        UR
                  (       a"  UR
                  R                  (       d  S Ul        UR                  (       a"  UR                  R                  (       d  S Ul        [        US5      (       a<  [        U5        UR                  R                  S:X  a  UR                  S:X  a  SUl        [        US5      (       a,  UR                  (       a  UR                  R                  (       d  S Ul        UR                  S:X  a  SUl        [        UR                  =(       d    UR                  =(       dq    UR
                  =(       d^    UR                  =(       dK    UR                  S:  =(       a    UR                  =(       d"    UR                  S:  =(       a    UR                  5      $ )Nr  r   i  i  rw  rr  )r  rx  ry  rz  rG   r{  r|  r   r  r  r  VarDataCountrs  rw  r   rh   rt  s       r   r   r   c  s~   JJE%"4"4"B"B!(@(@(J(J#' 5#6#6#@#@" 0 0 ; ;uj!!4>>&&!+}}
* *E-..%%%%..!%==J&&EM 	<##	<	< 	< MMZ'BE,B,B		<
 MMZ':ENN r(   kernc                     U R                    Vs/ s H  n[        US5      (       d  M  UPM     snU l         [        U R                   5      $ s  snf )N	kernTable)
kernTablesr  rh   r$   r&   r   ts       r   rk  rk    s<     #'//M/QWQ5Lq/MDO   Ns
   AAc           	      |   UR                   nU R                   HL  nUR                  R                  5        VVVs0 s H  u  u  pEnXB;   d  M  XR;   d  M  XE4U_M     snnnUl        MN     U R                   Vs/ s H  o3R                  (       d  M  UPM     snU l        [	        U R                  5      $ s  snnnf s  snf r   )rK  r  r  rL   rh   )r$   re   r%   r  r   r   rM   s          r   rj   rj     s    __F__ [[..0
0	{  { QFAI0
  #'//A/Q[[q/ADO  

 Bs   B2
B2
B2
7B9B9vmtxc                     [        U R                  UR                  5      U l        UR                   H  nSU R                  U'   M     [	        U R                  5      $ )Nr   r   )r,   metricsr%   glyphs_emptiedrh   r$   re   r   s      r   rj   rj     sD    ahh7DL Q r(   hmtxc                     [        U R                  UR                  5      U l        UR                   H  nSU R                  U'   M     g)Nr  T)r,   r  r%   r  r  s      r   rj   rj     s8    ahh7DL Q r(   hdmxc           	      8   U R                   R                  5        VVs0 s H  u  p#U[        X1R                  5      _M     snnU l         U R                    H(  nUR                   H  nSU R                   U   U'   M     M*     [        U R                   5      $ s  snnf r`  )r  rL   r,   r%   r  rh   )r$   re   szr0   r   s        r   rj   rj     s{    <@IIOO<MN<M52\!XX..<MNDIii!!A DIIbM! "  		?	 Os   "Bankrc                 0   U R                   R                  nUR                  S:X  d   SUR                  -  5       eUR                   Vs0 s H#  o3UR                  ;   d  M  X2R                  U   _M%     snUl        [        UR                  5      S:  $ s  snf )Nr   zunknown 'ankr' format %s)r  AnchorPointsr   r%   Anchorsr/   r$   re   r  rl   s       r   rj   rj     s    JJ##E<<1G85<<GG1219emm=S#}}U##EM u}}!!s   	B Bbslnc                     U R                   R                  nUR                  S;   a&  UR                  R	                  UR
                  5        g g )N)r   r   )r  Baseliner   r%   r  StandardGlyph)r$   re   r  s      r   rf   rf     s8    JJE||v	U(() r(   c                    U R                   R                  nUR                  S;   a  UR                   Vs0 s H(  nX2R                  R                  X2R                  5      _M*     nn[        U5      S:  a^  [        UR                  5       5      R                  S5      S   u  pVXRl        UR                  5        VVs0 s H  u  p7Xu:w  d  M  X7_M     nnn[        U5      S:  a  XBl        gSSS.UR                     Ul        U?gs  snf s  snnf )N)r   r   r   r   r   T)r  r  r   r%   BaselineValuesr  DefaultBaseliner/   r   rX   most_commonrL   )r$   re   r  rl   	baselines
mostCommon_cntr   s           r   rj   rj     s    JJE||v 
! ''++E3H3HII! 	 
 y>A&y'7'7'9:FFqI!LJ$.!2;//2CW2Cheq2CIWy>A#,    !Q<5EL$
 Xs   /D;D
Dlcarc                 0   U R                   R                  nUR                  S;   aX  UR                   Vs0 s H#  o3UR                  ;   d  M  X2R                  U   _M%     snUl        [        UR                  5      S:  $  SUR                  -  5       es  snf )N)r   r   r   zunknown 'lcar' format %s)r  LigatureCaretsr   r%   Caretsr/   r  s       r   rj   rj     s    JJ%%E||v45HH
4<5@U&E<<&&H
 5<< 1$$?05<<??u
s   BBgvarc                     UR                   (       a-  UR                  (       d  / U R                  UR                  S   '   gNr   T)notdef_glyphnotdef_outline
variations
glyphOrderr  s      r   rk  rk    s-    G$:$:.0*+r(   c                     [        U R                  UR                  5      U l        [        U R                  5      U l        [        U R                  5      $ r   )r,   r  r%   r/   
glyphCountrh   r  s     r   rj   rj     s7    "4??AHH=DO$//*DO  r(   c                    UR                   R                  5        VVs0 s H
  u  p4X1U   _M     nnnXR                   U R                        nU R                  R                  5        H  u  pxXR                  :  a  UOSXW'   M     U$ s  snnf r`  )rc   rL   last_retained_glyphreverseEmptiedGlyphMaplast_retained_order)	re   r  	table_mapr  rM   map_last_idxr   r3   s	            r   _remap_index_mapr    s    )2):):)@)@)BC)BA!})BDC ++A,A,ABCH((..0"7"77(Q 1K Ds   BHVARc                 N   U R                   n[        5       n[        5       nSnUR                  (       am  [        UR                  R                  UR
                  5      UR                  l        UR                  UR                  R                  R                  5       5        OOUR                  UR                  R                  5       5        UR                  5       nUR                  R                  nUR                  (       al  [        UR                  R                  UR
                  5      UR                  l        UR                  UR                  R                  R                  5       5        UR                  (       al  [        UR                  R                  UR
                  5      UR                  l        UR                  UR                  R                  R                  5       5        UR                  R                  X5US9nUR                  (       a%  [!        XUR                  5      UR                  l        UR                  (       a%  [!        XUR                  5      UR                  l        UR                  (       a%  [!        XUR                  5      UR                  l        gNF)retainFirstMapadvIdxesT)r  r;   AdvWidthMapr,   rc   r%   rb   rX   reverseOrigGlyphMapcopyr   retain_gidsLsbMapRsbMapr  r  r  r$   re   r  used	advIdxes_retainAdvMapr  s          r   rj   rj     s   JJE5DIL$01B1B1J1JAHH$U!E%%--4467A))0023IIK	yy,,||+ELL,@,@!((KELL((//12||+ELL,@,@!((KELL((//12//I 0 J $4QEDUDU$V!||/u||L||/u||L r(   VVARc                    U R                   n[        5       n[        5       nSnUR                  (       am  [        UR                  R                  UR
                  5      UR                  l        UR                  UR                  R                  R                  5       5        OOUR                  UR                  R                  5       5        UR                  5       nUR                  R                  nUR                  (       al  [        UR                  R                  UR
                  5      UR                  l        UR                  UR                  R                  R                  5       5        UR                  (       al  [        UR                  R                  UR
                  5      UR                  l        UR                  UR                  R                  R                  5       5        UR                  (       al  [        UR                  R                  UR
                  5      UR                  l        UR                  UR                  R                  R                  5       5        UR                  R!                  X5US9nUR                  (       a%  [#        XUR                  5      UR                  l        UR                  (       a%  [#        XUR                  5      UR                  l        UR                  (       a%  [#        XUR                  5      UR                  l        UR                  (       a%  [#        XUR                  5      UR                  l        gr  )r  r;   AdvHeightMapr,   rc   r%   rb   rX   r  r  r   r  TsbMapBsbMapVOrgMapr  r  r  r  s          r   rj   rj   #	  s   JJE5DIL%1%2D2D2L2Lahh%W"E&&..5578A))0023IIK	yy,,||+ELL,@,@!((KELL((//12||+ELL,@,@!((KELL((//12}} ,U]]-B-BAHH MEMM))0023//I 0 J %5aUEWEW%X"||/u||L||/u||L}} 0 N r(   VORGc                     U R                   R                  5        VVs0 s H  u  p#X!R                  ;   d  M  X#_M     snnU l         [        U R                   5      U l        gs  snnf r   )VOriginRecordsrL   r%   r/   numVertOriginYMetricsri   s       r   rj   rj   N	  s[     ,,2244XX4D "%T%8%8!9D	s
   A!A!opbdc                 
   U R                   R                  nUR                  S:X  aX  UR                   Vs0 s H#  nX2R                  ;   d  M  X2R                  U   _M%     snUl        [        UR                  5      S:  $ UR                  S:X  aX  UR                   Vs0 s H#  nX2R                  ;   d  M  X2R                  U   _M%     snUl        [        UR                  5      S:  $  SUR                  -  5       es  snf s  snf )Nr   r   zunknown 'opbd' format %s)r  OpticalBoundsr   r%   OpticalBoundsDeltasr/   OpticalBoundsPointsr  s       r   rj   rj   W	  s    JJ$$E||q %
!111 4E,,U33!%
!
 5,,-11		 %
!111 4E,,U33!%
!
 5,,-11?05<<??u%
%
s   C;C;D 4D postc                 4    UR                   (       d  SU l        g)N      @T)glyph_names
formatTyper  s      r   rk  rk  l	  s    r(   c                     / U l         gr   )
extraNamesr  s     r   rj   rj   s	  s    DOr(   propc                    U R                   R                  nUR                  S:X  a  UR                  S:g  $ UR                  S:X  a  UR                   Vs0 s H(  o3UR
                  R                  X2R                  5      _M*     snUl        [        UR
                  R                  5       5      R                  S5      S   u  pEXBl        UR
                  R                  5        VVs0 s H  u  p2X$:w  d  M  X2_M     snnWl        [        UR
                  5      S:X  a  U?SUl        UR                  S:g  $ g SUR                  -  5       es  snf s  snnf )Nr   r   Tzunknown 'prop' format %s)r  GlyphPropertiesr   DefaultPropertiesr%   
Propertiesr  r   rX   r  rL   r/   )r$   re   r  r   r  r  s         r   rj   rj   y	  s(   ::%%D{{a%%**		GHxx
GO!t""1&<&<==x
 #4??#9#9#;<HHKAN
!+#'??#8#8#:
#:d>PGAG#:
 t1$DK))Q..>04;;>>u


s   /E	%E4Ec                 J   ^ [        5       mU4S jnU R                  X5        T$ )Nc                    > U R                   [        R                  R                  [        R                  R                  1;   a  TR                  U R                  5        g g r   )r   r   PaintFormat
PaintGlyphPaintColrGlyphr  Glyph)paintresults    r   callback$_paint_glyph_names.<locals>.callback	  sI    <<  ++  //
 
 JJu{{#	
r(   )r;   traverse)r  colrr  r  s      @r   _paint_glyph_namesr  	  s"    UF$ 
NN4"Mr(   COLRc                    U R                   S:  ak  U R                  U R                  5      U l        U R                  R                  R
                   Vs0 s H  nUR                  UR                  _M     snU l        UR                  nU(       a  [        5       nU H  nU R                  R                  U/ 5       H  nUR                  UR                  5        M      U R                   S:  d  MS  U R                  R                  U5      nUc  Ms  UR                  [        XpR                  5      5        M     XAR                  -  nUR                  R                  U5        UnU(       a  M  g g s  snf r`  )version_decompileColorLayersV0r  ColorLayersBaseGlyphListBaseGlyphPaintRecord	BaseGlyphPaintColorLayersV1r%   r;   r  r  r   rb   r  )r$   re   r   	decomposelayersr   layerr  s           r   rf   rf   	  s!   ||a
  77

C zz//DD
D MM399$D

 I
A))--a4

5::& 5 ||a**..q1$MM"4UJJ"GH  	((		 )
s   !E,c                 Z   SSK Jn  SSKJnJn  UR
                  Ul        UR                   Vs0 s H#  oUU R                  ;   d  M  XPR                  U   _M%     snU l        U R                  S:X  a  [        U R                  5      $ U" U R                  R                  U R                  R                  5      nU" U Vs0 s H  oUUR                  ;   d  M  XVU   _M     sn5      u  U R                  l        U R                  l        U ?U R                  R                  b`  U R                  R                  R                  nU Vs0 s H  oUUR                  ;   d  M  XWU   _M     snU R                  R                  l        U R                  nU R                  R                  R                   (       d  SU l        U ?
[        U5      $ U" U R                  U VV	s0 s H-  oUX    V	s/ s H  oR"                  U	R$                  4PM     sn	_M/     sn	n5        U ?gs  snf s  snf s  snf s  sn	f s  sn	nf )Nr   )unbuildColrV1)buildColrV1populateCOLRv0T)fontTools.colorLib.unbuilderr  fontTools.colorLib.builderr	  r
  glyphs_colredr%   r  r  rh   r  	LayerListr  r  ClipListclipsr   r   colorID)
r$   re   r  r	  r
  r   colorGlyphsV1r  layersV0r  s
             r   rj   rj   	  s   :F AH )*(019I9I4IAD ||qD$$%%!$**"6"6

8P8PQM5@&3EmAHH}	!	mE62DJJ$**2 	zz&

##)):?$Q%Q=[Qa[%$Q

!H::##88JH~

LTUHqhkBkUjj%--(kB	BHU 	 = 	F %R CUs;   HH<H	HH	HH' !H"H'"H'CPALc                 6  ^ SU;   a  gUR                  S5      nU(       d  g[        [        5      mU4S jnUR                  S:X  aI  UR                  R                  5        H*  nU H!  nTUR                     R                  U5        M#     M,     OUR                  R                  (       aE  UR                  R                  R                   H!  nTUR                     R                  U5        M#     UR                  R                  R                   H)  nUR                  R                  UR                  U5        M+     [!        TR#                  5       5      S1-
  nU R$                   HG  n	['        U	5       V
Vs/ s H  u  pX;   d  M  UPM     snn
U	S S & [)        U	5      [)        U5      :X  a  MG   e   ['        [+        U5      5       HL  u  pTU    H>  n[-        US5      (       a  Xl        M  [-        US	5      (       a  Xl        M5  [/        U5      e   MN     [)        U R$                  S   5      U l        U R                  S
:X  a>  / n['        U R2                  5       H  u  pX;   d  M  UR                  U5        M     Xl        [5        U R0                  5      $ s  snn
f )NzSVG Tr  Fc                    > [        U S5      (       a  TU R                     R                  U 5        g [        U S5      (       a<  U R                  R                   H!  nTUR                     R                  U5        M#     g g )NPaletteIndex	ColorLine)r  r  r"  r  	ColorStop)r  stopcolors_by_indexs     r   collect_colors_by_index2prune_post_subset.<locals>.collect_colors_by_index 
  sh    5.))E../66u=UK((11 1 1299$? 2 )r(   r   r  r  r  r   )r  r   rW   r  r  rX   r  r"  r  LayerRecordArrayLayerRecordr  r  r   r  r  r;   keyspalettesr6   r/   r"   r  AssertionErrornumPaletteEntriespaletteEntryLabelsrh   )r$   r&   r   r  r  r  r  rd  retained_palette_indicespaletter3   r}   	new_index	old_indexkept_labelslabelr  s                   @r   r   r   	  s(    ~88FD!$'O@ ||q&&--/F.55e<   0 ::&&44@@ 2 23::5A Ajj..CCFLL!!$**.EF D
  #?#7#7#9:fXE==$-g$6X$6DA!:Wa$6X
7|s#;<<<< ! !*&1I*J K	%i0Fvy))!*00&/#$V,, 1 !L !q!12D||q!$"9"9:HA,""5) ; #.&&'') Ys   7JJc                    [        5       nU R                   H  nUR                  UR                  5        M      U R                  (       a8  U R                  R
                   H  nUR                  UR                  5        M      U$ r   )r;   MathGlyphVariantRecordr  VariantGlyphGlyphAssemblyPartRecordsrl   )r$   r%   variantsrM   r   s        r   rf   rf   -
  s]    uH((Q^^$ )##//ALL! 0Or(   c                     [        UR                  5      n[        5       nU R                  (       aQ  U R                  R	                  U5      nU H0  nUR                  U R                  U   R                  U5      5        M2     U R                  (       aQ  U R                  R	                  U5      nU H0  nUR                  U R                  U   R                  U5      5        M2     UR                  R                  U5        g r   )
r  r%   r;   VertGlyphCoverager7   rb   VertGlyphConstructionrf   HorizGlyphCoverageHorizGlyphConstruction)r$   re   r%   r0  r1   r3   s         r   rf   rf   8
  s    qxx FuH((226:AOOD66q9HHPQ  ))33F;AOOD77:II&QR  HHOOHr(   VARCc                 8   U R                   R                  R                  UR                  5      n[	        U R                   R
                  R                  U5      U R                   R
                  l        [        U R                   R
                  R                  5      $ r   )r  r   r?   r%   r4   VarCompositeGlyphsVarCompositeGlyphrh   r$   re   r1   s      r   rj   rj   J
  si    jj!!((2G6B

%%777DJJ!!3 

--??@@r(   c                 Z   U R                   R                  c  g [        U R                   R                  R                  5       VVs0 s H  u  p#X2_M	     nnnU R                   R                  R
                  nUR                  n[        5       n[        U5      nU(       a  Un	[        5       nU	 Hl  nX7;   a  M
  UR                  U5      n
U
c  M   XZ   nUR                   H8  nUR                  nUR                  U5        X;  d  M'  UR                  U5        M:     Mn     U(       a  M  g g s  snnf r   )r  r8  r6   r   r%   r9  r;   r  
components	glyphNamer  )r$   re   r3   r=  glyphMapglyphRecordsr%   r  newoldNewidxrl   compr   s                 r   rf   rf   S
  s    zz$$,1:4::;N;N;U;U1VW1V	1VHW::00BBLXXFeG
f+C
eI#,,y)C{ %E((~~

4 &GGDM	 )   # Xs   D'c                    U R                   nUR                  nUb=  [        5       nUR                  U5        UR	                  U5      nUR                  U5        UR                  R                  nUb  [        5       nUR                  R                   H@  n	U	R                   H-  n
U
R                  c  M  UR                  U
R                  5        M/     MB     [        U5      n[        Xx5      UR                  l        [        U5       VVs0 s H  u  pX_M	     nnnUR                  R                   H8  n	U	R                   H%  n
U
R                  c  M  XR                     U
l        M'     M:     UR                   nUb  UR"                  n[        5       nUR                  R                   H@  n	U	R                   H-  n
U
R$                  c  M  UR                  U
R$                  5        M/     MB     [        U5      n[        X5      Ul        [        U5       VVs0 s H  u  pX_M	     nnnUR                  R                   H8  n	U	R                   H%  n
U
R$                  c  M  XR$                     U
l        M'     M:     gs  snnf s  snnf r   )r  MultiVarStorer;   collect_varidxesr  remap_varidxesAxisIndicesListItemr8  r9  r<  axisIndicesIndexr  r"   r4   r6   ConditionListConditionTableconditionIndex)r$   r&   r   r  r  r  r  axisIndicesListusedIndicesrl   rC  r@  oldrc   conditionListconditionTabless                   r   r   r   o
  s+   JJEEu|,**<8
Z(++00O"e--??E((((4OOD$9$9: ) @ [)%1/%O",5k,BC,B38,BC--??E((((4,34I4I,JD) ) @
 ''M '66e--??E((&&2OOD$7$78 ) @ [)'3O'Q$,5k,BC,B38,BC--??E((&&2*12E2E*FD' ) @
 - D  Ds   	I8I>MATHc                     U R                   R                  (       a&  U R                   R                  R                  U5        g g r   )r  MathVariantsrf   r  s     r   rf   rf   
  s,    zz

..q1 r(   c                     U R                   R                  UR                  5      n[        U R                  U5      U l        [        U R                  5      U l        [        U R                  5      $ r   )r   r?   r%   r4   ItalicsCorrectionr/   ItalicsCorrectionCountrh   r:  s      r   rj   rj   
  sS    mm""188,G)$*@*@'JD"%d&<&<"=D++,,r(   c                     U R                   R                  UR                  5      n[        U R                  U5      U l        [        U R                  5      U l        [        U R                  5      $ r   )TopAccentCoverager?   r%   r4   TopAccentAttachmentr/   TopAccentAttachmentCountrh   r:  s      r   rj   rj   
  sU    $$++AHH5G+D,D,DgND$'(@(@$AD!--..r(   c                     U R                   R                  UR                  5      n[        U R                  U5      U l        [        U R                  5      U l        [        U R                  5      $ r   )MathKernCoverager?   r%   r4   MathKernInfoRecordsr/   MathKernCountrh   r:  s      r   rj   rj   
  sU    ##**1884G+D,D,DgNDT556D""##r(   c                 x   U R                   (       a  U R                   R                  U5        U R                  (       a  U R                  R                  U5        U R                  (       a  U R                  R                  U5        U R                  (       a%  U R                  R                  UR                  5        gr   )MathItalicsCorrectionInforj   MathTopAccentAttachmentMathKernInfoExtendedShapeCoverager?   r%   r  s     r   rj   rj   
  s}    %%&&44Q7##$$2215''*!!""))!((3r(   c                    U R                   (       aZ  U R                   R                  UR                  5      n[        U R                  U5      U l        [        U R                  5      U l        U R                  (       aZ  U R                  R                  UR                  5      n[        U R                  U5      U l        [        U R                  5      U l	        gr   )
r2  r?   r%   r4   r3  r/   VertGlyphCountr4  r5  HorizGlyphCountr:  s      r   rj   rj   
  s    ((//9%1$2L2Lg%V"!$"<"<=))00:&243N3NPW&X#"4#>#>?r(   c                 &   UR                   Ul        U R                  R                  (       a%  U R                  R                  R	                  U5        U R                  R
                  (       a%  U R                  R
                  R	                  U5        gr   )glyphs_mathedr%   r  MathGlyphInforj   rU  r  s     r   rj   rj   
  sZ    AHzz

  ..q1zz

--a0r(   glyfc                    U R                   (       a+  [        R                  " SU R                   S S 5      S   S:  a  g [        U R                   5      =o l         SnSnU(       a  X#   S-  X#S-      -  nX#S-      S-  X#S-      -  nX   nUS-	  X#S-   '   US-  X#S-   '   US	-  n[	        U5      nUS-  (       a  US	-  nOUS-  nUS-  (       a  US-  nOUS
-  (       a  US	-  nOUS-  (       a  US-  nUS-  nU(       a  M  g g )Nz>hr   r   
   r      r      rX  @          )datastructunpack	bytearrayr   )r$   
glyphidmaprt  r3   moreflagsglyphIDs          r   remapComponentsFastr|  
  s   99dDIIbqM:1=B ++D9
AD
A!e,A;!#tE{2%lUnU	QE
6>FAFA6>FAV^FAV^FAv~) $r(   c                 :   U R                   nUR                   nU(       a|  [        5       nU H7  nXR;  a  M
  X%   nUR                  U 5       H  nUR                  U5        M     M9     XAR                   -  nUR                   R	                  U5        UnU(       a  M{  g g r   )r%   r;   getComponentNamesr  rb   )r$   re   glyphSetr  r<  r   glr}   s           r   rf   rf   
  s    {{HI
U
A B))$/q! 0	  	hh
	
#	 )r(   c                     UR                   (       aC  UR                  (       d2  X R                  S      nUR                  R	                  5         SUl        g)Nr   r(   T)r  r  r  __dict__clearrt  )r$   r&   r   r   s       r   rk  rk    s>    G$:$:#$	

r(   c                    [        U R                  UR                  5      U l        UR                  R                  (       d  [	        U R
                  5       VVs/ s H  u  p#X1R                  ;   d  M  UPM     nnn[	        U5       VVs0 s H  u  pVXe_M	     nnnU R                  R                  5        H'  n[        US5      (       d  M  UR                  U5        M)     [        R                  " S5      R                  n	UR                   H+  nU	" 5       U R                  U'   SU R                  U   l        M-     U R
                   Vs/ s H%  o3UR                  ;   d  X1R                  ;   d  M#  UPM'     snU l        gs  snnf s  snnf s  snf )Nrt  rl  r(   T)r,   r%   r   r  r6   r  rX   r  r|  r   getTableModuler  r  rt  )
r$   re   r3   r   r1   r<  oglyphmaprM   r  s
             r   rj   rj     s-   t{{AHH5DK99  !*4??!;M!;qHH}1!;M%.w%78%7TQAD%78##%Aq&!!%%h/ &   (..EA!A  ??"a188mq<L<L7L?DO  N8s   E=2E=	F"F	.F	c                     UR                   (       + nU R                  R                  5        H  nUR                  US9  M     g)N)remove_hintingT)r   r%   rX   trim)r$   r&   r   r  rM   s        r   r   r   -  s6     (N[[!	n- "r(   cmapc                    ^
 U R                    Vs/ s H  o"R                  5       (       d  M  UPM     nnU H  nUR                  S:X  a  UR                  R	                  5        Hp  u  nm
XQR
                  ;  a  M  T
 VVs1 s H  u  pgXaR
                  ;   d  M  UiM     nnnS U;   a  UR                  S 5        UR                  R                  U5        Mr     M  UR                  m
UR
                  R                  T
R                  5       5      n	UR                  R                  U
4S jU	 5       5        M     UR
                  R                  5       Ul        U H(  nUR                  R                  UR                  5        M*     g s  snf s  snnf )N   c              3   .   >#    U  H
  nTU   v   M     g 7fr   r   )r   ur  s     r   r   r`   F  s     :\DG\r    )tables	isUnicodeformatuvsDictrL   unicodes_requestedrm  r%   rb   r  r   r   r  unicodes_missingdifference_update)r$   re   r  r  r  varSelectorr  r   r%   r   r  s             @r   rf   rf   5  s+   6AaF6 <<2%*]]%8%8%:!T&:&::(,J5I5I0I!J6>MM$'' &; ::D//<<TYY[ILHHOO:\::  --224A	,,UZZ8 ' 7 Ks   FF?F

F

c                 
   UR                   (       dM  U R                   Vs/ s H0  o3R                  5       (       d  UR                  5       (       d  M.  UPM2     snU l        UR                  (       d8  U R                   Vs/ s H  o3R                  5       (       a  M  UPM     snU l        U R                   Vs/ s H  o3R
                  S:w  d  M  UPM     snU l        [        U R                  5      U l        gs  snf s  snf s  snf r  )legacy_cmapr  r  isSymbolsymbol_cmapr  r/   numSubTablesr  s       r   rk  rk  N  s    "&++O+Q!**,q+O"&++B+QZZ\q+B #kk;kXX]1k;DKDKK(D PB <s#   -C6C6>C;C;6D D c                    S Ul         / n0 n0 nU R                   GHC  nUR                  S:X  a  UR                  S:X  a  XSUR                  '   UR                  S:X  a  UR                  S:X  a  XTUR                  '   UR
                  S:X  a  UR                  R                  5        VVVV	s0 s HO  u  pgXaR                  ;   d  M  UU VV	s/ s H(  u  pXR                  ;   d  XR                  ;   d  M%  X4PM*     sn	n_MQ     sn	nnnUl        UR                  R                  5        VVs0 s H  u  pgU(       d  M  Xg_M     snnUl        GM0  UR                  5       (       a  UR                  R                  5        VV	s0 s H'  u  pXR                  ;   d  XR                  ;   d  M%  X_M)     sn	nUl        UR
                  S:X  aR  UR                  (       a>  [        UR                  R                  5       5      S:  a  UR                  U5        GM  GM  GM  GM  UR                  R                  5        VV	s0 s H  u  pXR                  ;   d  M  X_M     sn	nUl        GMF     U H  nUR                  S:X  ab  UR                  S:X  aR  UR                  U;   aB  X5R                     R                  UR                  :X  a  UR                  R                  5         Mu  UR                  S:X  d  M  UR                  S:X  d  M  UR                  U;   d  M  XER                     R                  UR                  :X  d  M  UR                  R                  5         M     U R                   Vs/ s H;  oUR
                  S:w  a  UR                  (       d  M%  OUR                  (       d  M9  UPM=     snU l        [!        U R                  5      U l        g	s  sn	nf s  sn	nnnf s  snnf s  sn	nf s  sn	nf s  snf )
Nr   r   r   r     rr  rX  rn  T)r%   r  
platformID	platEncIDlanguager  r  rL   r  glyphs_requestedr  r  maxr   r"  r  r/   r  )
r$   re   tables_format12_bmptable_plat0_enc3table_plat3_enc1r  rM   r0   r  r   s
             r   rj   rj   \  s   AH[[<<1!1+,QZZ(<<1!1+,QZZ(88r> IIOO- .DA,,, ! !...!7K7K2K QF ! 
 .AI +,))//*;A*;$!q*;AAI[[]] FFLLN*DA***a3G3G.G *AF xx2~!&&S-?'-I#**1- .J&~ ()vv||~Q~tq>P>P9Pdad~QAF? F !LLAq 

.. ,11QVV;FFLLNLLAr!

.. ,11QVV;FFLLN !  #kkWkBaff1fAII1kWDKDKK(D [ B R( XsZ   )OO$O0O7O'O8O<$O$O5O"O"#$O(O(O(ODSIGc                      SU l         / U l        gr  )	usNumSigssignatureRecordsr  s      r   rk  rk    s     DNDr(   maxpc                     UR                   (       dA  U R                  S:X  a1  SU l        SU l        SU l        SU l        SU l        SU l        SU l        g)Nrr  r   r   T)	r   tableVersionmaxZonesmaxTwilightPoints
maxStoragemaxFunctionDefsmaxInstructionDefsmaxStackElementsmaxSizeOfInstructionsr  s      r   rk  rk    sP    ??
*DM%&D"DO#$D &'D#$%D!)*D&r(   r   c                    [        5       nUR                  U5        [        UR                  5      UR                  -  nSUR                  ;   a:  X@R
                   Vs1 s H   oUR                  S:  d  M  UR                  iM"     sn-  nU R
                   Vs/ s H  oUR                  U;   d  M  UPM     snU l        UR                  (       d8  U R
                   Vs/ s H  oUR                  5       (       d  M  UPM     snU l        SUR                  ;  a=  U R
                   Vs/ s H   oUR                  UR                  ;   d  M  UPM"     snU l        UR                  (       a  / nU R
                   H  nUR                  S;   a.  UR                  5       (       a  SR                  S5      OSUl        OhUR                  S;   a.  UR                  5       (       a  SR                  S5      OSUl        O*UR                  S:X  a  S	Ul        OUR                  S
;   a  M  UR                  U5        M     X`l        gs  snf s  snf s  snf s  snf )Nr      )r   rX  z.	utf_16_be)r      r   r!  )         T)r   visitr;   name_IDsseenr9  nameIDname_legacyr  name_languageslangIDobfuscate_namesencodestringr"  )r$   r&   r   visitornameIDsr<  namerecss          r   r   r     s   !GMM$'""#gll2G
gjjCjHHsNHAHHjCC!ZZ?Z88w+>!Z?DJ "&=A{{}a=

'(((!%RAxx7;Q;Q/QaR
Axx6!:;++--7>>+6WV#9:6==5FQ\)OOA  
/ D? > Ss0   H53H5H:-H:H?6H?"IIheadc                     gr   r   r  s      r   r   r     s     r(   c                      \ rS rSr " S S\5      r " S S\5      r/ SQr\/ SQ-  r/ SQr/ S	Qr	/ S
Q/ SQ/ SQ/ SQSS/SS/S/S// SQ/ SQ/ SQ/ SQ/ SQ/ SQS.r
\" \" \" \
R                  5       5      / 5      5      rS rS r/ 4S jrSrg) Optionsi  c                       \ rS rSrSrg)Options.OptionErrori  r   Nru  r  r  r  r  r   r(   r   OptionErrorr        r(   r  c                       \ rS rSrSrg)Options.UnknownOptionErrori  r   Nr  r   r(   r   UnknownOptionErrorr    r  r(   r  )BASEJSTFr  r=  r5  EBSCPCLTLTSH)FeatGlatGlocSilfSill)avarfvargaspr  hhear  vheaOS/2locar   cvtfpgmprepVDMXr  r  MVARcvarSTAT)r  r  r  r  r  r  )rvrnccmpligaloclmarkmkmkrlig)fracnumrdnom)caltcligcursr  rclt)valtvertvkrnvpalvrt2ltraltrmrtlartlmrandjalt)HarfHARFBuzzBUZZ)chwsvchwhaltvhal)
initmedifinaisolmed2fin2fin3cswhmsetstch)ljmovjmotjmo)abvsblwsabvmblwm)nuktakhnrphfrkrfr  blwfhalfabvfpstfcfarvatucjctr  presr  r  pstshalndistr  r  )common	fractions
horizontalverticalltrrtlr  justifyprivateeast_asian_spacingarabichangultibetanindicc                    U R                   S S  U l        U R                  S S  U l        SU l        U R
                  S S  U l        SU l        SU l        U R                  S S  U l
        S/U l        SU l        SU l        SU l        SU l        SU l        SU l        / SQU l        SU l        S/U l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        S U l         S U l!        SU l"        SU l#        [H        RJ                  U l&        SU l'        SU l(        SU l)        SU l*        SU l+        SU l,        U RZ                  " S0 UD6  g )NFTr   )r   r   r   r   rX     r  i	  r  r   )._drop_tables_defaultdrop_tables_no_subset_tables_defaultno_subset_tablespassthrough_tables_hinting_tables_defaulthinting_tableslegacy_kernlayout_closure_layout_features_defaultrj  ri  ignore_missing_glyphsignore_missing_unicodesr   r  r  r  r  r  r  r  r  r  r  recommended_glyphsrecalc_boundsrecalc_timestampprune_unicode_rangesprune_codepage_rangesrecalc_average_widthrecalc_max_contextcanonical_orderflavorwith_zopflidesubroutinizer   defaultharfbuzz_repackerverbosetimingxmlfont_number
pretty_svglazyr;   )r$   kwargss     r   r  Options.__init__J  s{   44Q7 $ > >q A"'"::1= "#<<Q?"e%*"'+$   
 !%h$  #"'" %$(!%)"$)!"'# #!6!>!>	6r(   c                     UR                  5        H5  u  p#[        X5      (       d  U R                  SU-  5      e[        XU5        M7     g )NUnknown option '%s')rL   r  r  r   )r$   r]  r  rM   s       r   r;   Options.set}  s@    LLNDA4##--.Ca.GHHDQ #r(   c                 N   / n/ nU GH  nUnUR                  S5      (       d  UR                  U5        M/  USS  nUR                  S5      nSnUS:X  aI  UR                  S5      (       a  USS  n	U	S:X  a  S n
OSn
OUn	S	n
U	R                  S
5      (       a  U	S S n	S
n
O"US U n	U	S   S;   a  U	S   S-   nU	S S n	XWS-   S  n
U	nU	R	                  SS5      n	[        X	5      (       d1  US	L d  X;   a  UR                  U5        M  U R                  SU-  5      e[        X	5      nU
S
:X  a  [        SU< SU< 35        GM4  [        U[        5      (       a  [        U
5      n
GO0[        U[        5      (       a  [        U
5      n
GO[        U[        5      (       a  [        U
5      n
O[        U[        5      (       a  [        U
[        5      (       a  U R                  SU-  5      eU
R	                  SS5      R                  5       nUS/:X  a  / nU Vs/ s H*  n[!        U5      (       a  US   S;   a  [        US5      OUPM,     nnUS:X  a  Un
OFUS:X  a  Un
U
R#                  U5        O,US:X  a$  Un
U H  nX;   d  M
  U
R%                  U5        M     O e['        X	U
5        GM     X4-   $ s  snf )Nz--r   =r  zno-r   zcanonical-orderFT?z-+r   -_r`  zCurrent setting for 'z' is: z5Option '%s' requires values to be specified using '=', r!  r   
0123456789z+=z-=)rw  r"  findrv  replacer  r  r   printr  rh   r   strrW   r  rZ  r/   r  rm  r   )r$   argvignore_unknownposargspassthru_optionsr   orig_ar3   opr  rM   okovvvr9  s                  r   
parse_optsOptions.parse_opts  s   AF<<%%q!!"AsABBw<<&&!"A-- !!AA::c??#2AAbqER5D=2B#2A!egJB		#s#A4##!T)R-A$++F3112G!2KLL!BCx2rBC"d##GB$$FB$$FB%%a&&**ORSS  YYsC(..0":BSUVSUa3q66adl.Bc!QiISUV9A4ZAHHRL4ZA6HHQK   !5DQM P ))! Ws   1J")'rQ  rT  r?  rR  rZ  r  rV  r   rD  rH  rI  rF  rj  ri  r\  r  rE  r  r  r  rA  r  r  r  rB  r[  rN  rM  rO  rK  rP  rL  rJ  r  r  rX  rW  rS  rY  N)ru  r  r  r  	Exceptionr  r  r>  r@  rC  _layout_features_groupsr   r  iterrX   rG  r  r;   rw  r  r   r(   r   r  r    s    i [ 	 DD!* N
 K-><83>
 +3
72f  *D(//12B7 1f  /1 K*r(   r  c                       \ rS rSr " S S\5      r " S S\5      r " S S\5      rSS	 jr/ / / S
4S jr	S r
S rS rS rS rS rSrg)	Subsetteri  c                       \ rS rSrSrg)Subsetter.SubsettingErrori  r   Nr  r   r(   r   SubsettingErrorr    r  r(   r  c                       \ rS rSrSrg)&Subsetter.MissingGlyphsSubsettingErrori  r   Nr  r   r(   r   MissingGlyphsSubsettingErrorr    r  r(   r  c                       \ rS rSrSrg)(Subsetter.MissingUnicodesSubsettingErrori  r   Nr  r   r(   r   MissingUnicodesSubsettingErrorr    r  r(   r  Nc                     U(       d
  [        5       nXl        [        5       U l        [        5       U l        [        5       U l        g r   )r  r   r;   r  glyph_names_requestedglyph_ids_requested)r$   r   s     r   r  Subsetter.__init__  s/    iG"%%%(U"#&5 r(   r!  c                    U R                   R                  U5        [        U[        5      (       a  UR	                  S5      nUR                  S5      n[        U5      S-  n[        R                  " SU-  U5       H  nU R                   R                  U5        M      U R                  R                  U5        U R                  R                  U5        g )Nutf_8z	utf-32-berX  z>%dL)r  rb   r  bytesdecoder  r/   ru  rv  r  r  r  )r$   r%   gidsunicodestext
text_utf32ncharsr  s           r   populateSubsetter.populate  s    &&x0dE"";;w'D[[-
ZA%v
;A##''* <""))&1  ''-r(   c                 0   U R                  U5       GH^  nUR                  5       U R                  R                  ;   dj  UR                  5       U R                  R                  ;   a  U R                  R
                  (       a'  US:X  a;  U R                  R                  (       d   SU;   a  [        R                  SU5        X	 M  [        R                  " U5      n[        US5      (       d  M  [        SU-  5         X   nS S S 5        [        SU-  5         WR                  XR                  5      nS S S 5        W(       d  [        R                  SU5        X	 GMH  [        R                  SU5        GMa     g ! , (       d  f       N~= f! , (       d  f       N]= f)	Nr  rI  z
%s droppedrk  z	load '%s'
prune '%s'%s pruned to empty; dropped	%s pruned)_sort_tablesstripr   r?  rD  r   rE  logr!   r   rM  r  timerrk  r$   r&   ra  clazzr  retains         r   _prune_pre_subsetSubsetter._prune_pre_subset  s   $$T*C		t||777IIK4<<#>#>> LL006M4<<+C+CRVs+I'',Eu011;,- IE .<#-."33D,,GF /HH:C@	HH[#.3 +  .-..s   9E6F6
F	
F	c           	        ^
 [        UR                  5       5      nUR                  5       =U l        m
[        5       U l        U R                  R	                  U R
                  5        U R                  R	                  U
4S jU R                   5       5        [        5       U l        U R                  R	                  U R                  R                  U5      5        U R                  R	                  U
4S jU R                   5       5        U R                  (       aV  [        R                  SU R                  5        U R                  R                  (       d  U R                  U R                  5      eU R                  R                  5       U l        [        5       U l        SU;   aC  [#        S5         US   R%                  U 5        U R                  R'                  U5        S S S 5        [)        U R                  5      U l        U R                   (       ab  U R                    Vs/ s H  nSU-  PM
     nn[        R                  SU5        U R                  R,                  (       d  U R/                  U5      eAU R                  R0                  (       av  SU;   a@  U R                  R3                  UR5                  S	5      5        [        R                  S
5        O0U R                  R3                  S5        [        R                  S5        U R                  R6                  (       ax  SU;   ar  [9        [;        S[=        UR                  5       5      5      5       H-  nU R                  R3                  UR5                  U5      5        M/     [        R                  S5        SU;   a  [#        S5         [        R                  S[=        U R                  5      5        [        R                  U R                  US9  US   R%                  U 5        U R                  R'                  U5        [        R                  S[=        U R                  5      5        [        R                  U R                  US9  S S S 5        [)        U R                  5      U l        U R                  R@                  (       a  SU;   a  [#        S5         [        R                  S[=        U R                  5      5        [        R                  U R                  US9  US   R%                  U 5        U R                  R'                  U5        [        R                  S[=        U R                  5      5        [        R                  U R                  US9  S S S 5        [)        U R                  5      U l!        S GH  nXa;   a  [#        SU-  5         [        R                  SU[=        U R                  5      5        [        R                  U R                  US9  X   R%                  U 5        U R                  R'                  U5        [        R                  SU[=        U R                  5      5        [        R                  U R                  US9  S S S 5        [E        U SURG                  5        S3[)        U R                  5      5        GM     SU;   a  [#        S5         [        R                  S [=        U R                  5      5        [        R                  U R                  US9  US   R%                  U 5        U R                  R'                  U5        [        R                  S![=        U R                  5      5        [        R                  U R                  US9  S S S 5        [)        U R                  5      U l$        SU;   a  [#        S"5         [        R                  S#[=        U R                  5      5        [        R                  U R                  US9  US   R%                  U 5        U R                  R'                  U5        [        R                  S$[=        U R                  5      5        [        R                  U R                  US9  S S S 5        [)        U R                  5      U l$        S%U;   a  [#        S&5         [        R                  S'[=        U R                  5      5        [        R                  U R                  US9  US%   R%                  U 5        U R                  R'                  U5        [        R                  S([=        U R                  5      5        [        R                  U R                  US9  S S S 5        [)        U R                  5      U l%        [)        U R                  5      U l&        URO                  5       nU RL                   Vs0 s H  oXx   _M	     snU l(        [S        U RP                  RU                  5       5      U l+        UR                  5       U RV                     U l,        [)        5       U l-        U R                  R\                  (       a8  X RL                  -
   Vs1 s H  nXx   U RV                  ::  d  M  UiM     snU l-        U RZ                   Vs0 s H  oXx   _M	     snU l/        U R                  R\                  (       d$  T
 Vs/ s H  oU RL                  ;   d  M  UPM     n	nO2T
 Vs/ s H%  oRa                  U5      U RV                  ::  d  M#  UPM'     n	nXl1        [9        [=        U	5      5       Vs0 s H
  oWX      U_M     snU l2        [        R                  S)[=        U RL                  5      5        U ?g ! , (       d  f       G	N= fs  snf ! , (       d  f       GN&= f! , (       d  f       GN,= f! , (       d  f       GND= f! , (       d  f       GNH= f! , (       d  f       GNi= f! , (       d  f       GN= fs  snf s  snf s  snf s  snf s  snf s  snf )*Nc              3   N   >#    U  H  o[        T5      :  d  M  TU   v   M     g 7fr   r.   r   r3   glyph_orders     r   r   ,Subsetter._closure_glyphs.<locals>.<genexpr>  s%      %
$<qCDT@TNKN$<s   %%c              3   H   >#    U  H  o[        T5      :  d  M  Uv   M     g 7fr   r.   r  s     r   r   r    s!      #
/!K8H3HAA/s   "	"zMissing requested glyphs: %sr  zclose glyph list over 'cmap'zU+%04Xz)Missing glyphs for requested Unicodes: %srl  r   zAdded gid0 to subsetz.notdefzAdded .notdef to subsetrX  z!Added first four glyphs to subsetrS  zclose glyph list over 'MATH'z0Closing glyph list over 'MATH': %d glyphs before)r&   z.Closed glyph list over 'MATH': %d glyphs afterrB  zclose glyph list over 'GSUB'z0Closing glyph list over 'GSUB': %d glyphs beforez.Closed glyph list over 'GSUB': %d glyphs after)r  r  zclose glyph list over '%s'z.Closing glyph list over '%s': %d glyphs beforez,Closed glyph list over '%s': %d glyphs afterglyphs_edr6  zclose glyph list over 'VARC'z0Closing glyph list over 'VARC': %d glyphs beforez.Closed glyph list over 'VARC': %d glyphs afterzclose glyph list over 'glyf'z0Closing glyph list over 'glyf': %d glyphs beforez.Closed glyph list over 'glyf': %d glyphs afterzCFF zclose glyph list over 'CFF 'z0Closing glyph list over 'CFF ': %d glyphs beforez.Closed glyph list over 'CFF ': %d glyphs afterzRetaining %d glyphs)3r;   getGlyphOrderorig_glyph_orderr  rb   r  r  glyphs_missing
differencer  r!   r   rH  r  r  r%   r  r  rf   intersection_updater  glyphs_cmapedrI  r  r  r  getGlyphNamerJ  r  minr/   rj  rF  rK  r   lowerglyphs_glyfedglyphs_cffedglyphs_retainedr#   r  r  rX   r  r  r  r  r  
getGlyphIDnew_glyph_orderglyph_index_map)r$   r&   
realGlyphsr  missingr3   r  orderr   r  r  s             @r   _closure_glyphsSubsetter._closure_glyphs  s   ++-.
.2.@.@.BB #$$T%?%?@$$ %
$($<$<%
 	
 "e""4#8#8#C#CJ#OP"" #
//#
 	
 HH3T5H5HI<<55778K8KLL++002 #T>56V++D1//
; 7 't{{3  -1-B-BC-Bx!|-BGCHH@'J<<7799'BB<<$$~ 1 1! 45/0	*23<<**~s1c$*<*<*>&?@AAKKOOD$5$5a$89 B<=T>56FDKKHX 

4;;T
2V++D1//
;Dc$++FV 

4;;T
2 7 't{{3<<&&6T>56FDKKHX 

4;;T
2V++D1//
;Dc$++FV 

4;;T
2 7 't{{3%E}7%?@HHHDKK(
 JJt{{J6K..t4KK33J?HHFDKK(
 JJt{{J6 A DGEKKM?"5y7MN# && T>56FDKKHX 

4;;T
2V++D1//
;Dc$++FV 

4;;T
2 7 't{{3T>56FDKKHX 

4;;T
2V++D1//
;Dc$++FV 

4;;T
2 7 't{{3T>56FDKKHX 

4;;T
2V++D1//
;Dc$++FV 

4;;T
2 7 &dkk2(5'')9=9M9M#N9MAuxK9M#N #&t'?'?'F'F'H#I #'#5#5#78P8P#Q 'k<<## $&:&::#:A8t777 :#D =A<O<O&P<Oq%({<O&P#||''*5S+Qd>R>R9Rq+OSO '&a//!*<@X@X*X;    /27O8L2M 
2MQ/$%q(2M 
 	&D,@,@(ABKi 76
 D( 76 76 A@$ 76 76 76  $O# 'Q T 
s   -0m-m?'B>n3B>n,B?n(;B>n:,B>oB>o5o0o5)o5o::o?o?"pp(p	-
m<
n
n%(
n7	:
o	
o
o-c                 >   / U l         U R                  U5       GH/  n[        R                  " U5      nUR	                  5       U R
                  R                  ;   a  [        R                  SU5        MZ  [        US5      (       ax  [        SU-  5         X   nU R                  U l        UR                  U 5      nU ?S S S 5        W(       d  [        R                  SU5        X	 M  [        R                  SU5        M  U R
                  R                  (       a  [        R                  SU5        GM  [        R                  SU5        X	 GM2     [        S5         UR!                  U R"                  5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)	Nz%s subsetting not neededrj   zsubset '%s'z%s subsetted to empty; droppedz%s subsettedz'%s NOT subset; don't know how to subsetz0%s NOT subset; don't know how to subset; droppedzsubset GlyphOrder)r  r  r   rM  r  r   rA  r  r!   r  r  r  r%   rj   rB  warningsetGlyphOrderr  r  s         r   _subset_glyphsSubsetter._subset_glyphs  s/    $$T*C'',Eyy{dll;;;3S900=3./ IE"&"6"6DK"006F	 0
 HH=sC	HH^S100BCHNPSTI) +, &'t334 ('! 0/  ('s   )E=F=
F	
Fc                 
   UR                  5       nSU;   a"  UR                  S5        UR                  S5        U GH3  nUS:X  a  M  US:X  Ga  U R                  R                  (       aI  X   R                  5       nX   R                  USS9nXE:w  a   [        R                  SU[        U5      5        U R                  R                  (       a[  X   R                  S:  aI  X   R                  5       nX   R                  USS9nXg:w  a   [        R                  SU[        U5      5        U R                  R                  (       a<  X   R                  nX   R!                  U5      n	X:w  a  [        R                  S	X95        U R                  R"                  (       a<  [%        U5      n
XU   R&                  :w  a  XU   l        [        R                  S
X:5        [(        R*                  " U5      n[-        US5      (       d  GM  [/        SU-  5         X   nUR1                  XR                  5      nS S S 5        W(       d  [        R                  SU5        X	 GM  [        R                  SU5        GM6     g ! , (       d  f       NL= f)Nr   
GlyphOrderr  T)	pruneOnlyz%s Unicode ranges pruned: %sr   z%s CodePage ranges pruned: %sz%s xAvgCharWidth updated: %dz%s usMaxContext updated: %dr   r  r  r  )r   rm  r"  r   rM  getUnicodeRangesrecalcUnicodeRangesr  r!   r"   rN  r  getCodePageRangesrecalcCodePageRangesrO  xAvgCharWidthrecalcAvgCharWidthrP  r   usMaxContextr   rM  r  r  r   )r$   r&   	tableTagsra  old_unirangesnew_unirangesold_codepagesnew_codepagesold_avg_widthnew_avg_widthmax_contextr  r  r  s                 r   _prune_post_subsetSubsetter._prune_post_subset  s
   IIK	 YV$V$Cl"f}<<44$(I$>$>$@M$(I$A$A$RV$A$WM$5:CAV <<55$):K:Kq:P %)I$?$?$AM$(I$B$B4SW$B$XM$5;"=1
 <<44$(I$;$;M$(I$@$@$FM$5!?T<<22",T"2K"3i&<&<<1<S	.!>Q'',Eu122<#-. IE"44T<<HF / HH:C@	HH[#.S D /.s    I44
J	c                    ^ / SQm[        T5       VVs0 s H
  u  p#X2S-   _M     snnm[        UR                  5       U4S jS9nU Vs/ s H  o3S:w  d  M
  UPM     sn$ s  snnf s  snf )N)ru  rI  rB  r  r  r  r   rl  r   c                 (   > TR                  U S5      $ r`  )r  )ra  tagOrders    r   r&  (Subsetter._sort_tables.<locals>.<lambda>
  s    8<<Q3Gr(   )r  r  )r6   r"   r   )r$   r&   r3   r  r^  r  s        @r   r  Subsetter._sort_tables  s`    S)28)<=)<A1uH)<=diik'GH54a#4455 >5s   A		A%A%c                     U R                  U5        U R                  U5        U R                  U5        U R                  U5        g r   )r  r  r  r  )r$   r&   s     r   r?   Subsetter.subset  s:    t$T"D!%r(   )r  r  r  r%   r  r  r  r  rK  rj  r  r  r  r  r  r  r   r  r  r  r  r  r  r   )ru  r  r  r  ry  r  r  r  r  r  r  r  r  r  r  r?   r  r   r(   r   r}  r}    s\    )   ) !rBR 	./8l\561/f6&r(   r}  z	load fontc           	      ,   [         R                  " U UUR                  UR                  UUR                  S9nU(       aU  [         R
                  " S5      nUR                  nUR                  Ul        US   nUR                  S:X  a  SUl        Xvl        U$ )N)checkChecksumsrecalcBBoxesrecalcTimestampr\  
fontNumberr  g       @r  )	r   TTFontrK  rL  rZ  rM  decode_format_2_0decode_format_3_0r  )	fontFiler   r  dontLoadGlyphNamesr\  r&   r  savedr  s	            r   	load_fontr    s    <<%**00&&D$ ""6*&&!%!7!7L<<3AL!&Kr(   zcompile and save fontc                     UR                   (       a  UR                  S:X  a  SSKJn  SUl        UR                  U l        UR
                  U R                  [        '   U R                  XR                  S9  g )Nwoffr   )sfntT)reorderTables)
rS  rR  fontTools.ttLibr  
USE_ZOPFLIrV  cfgr   saverQ  )r&   outfiler   r  s       r   	save_fontr  4  sT    w~~7(..DK&-&?&?DHH"#IIg%<%<I=r(   c           
      r   SS K nUR                  SSU 5      n UR                  SSU 5      n / nU R                  5        Hv  nUR                  S5      n[        U5      S:X  a  UR	                  [        US5      5        M@  Uu  pVUR                  [        [        US5      [        US5      S-   5      5        Mx     U$ )Nr   z0[xX]rh  z[<+>,;&#\\xXuU\n	]re  r   r  )rerp   rZ  r/   r"  r   r  r  )re   r  r0   itemfieldsstartends          r   parse_unicodesr  ?  s    
xa A
$c1-A
A	Cv;!HHSr]#JEHHU3ub>3sB<!+;<=  Hr(   c           
      B   / nU R                  SS5      R                  5        Hx  nUR                  S5      n[        U5      S:X  a  UR                  [	        US   5      5        MB  UR                  [        [	        US   5      [	        US   5      S-   5      5        Mz     U$ )Nrg  rh  re  r   r   )rk  rZ  r/   r"  r   r  r  )re   r0   r  r  s       r   
parse_gidsr  O  s    
A		#s#))+Cv;!HHS^$HHU3vay>3vay>A+=>? , Hr(   c                 B    U R                  SS5      R                  5       $ )Nrg  rh  )rk  rZ  )re   s    r   parse_glyphsr  Z  s    99S#$$&&r(   c                  n    [        S[        [        R                  S9  [        S[        R                  S9  g )Nzusage:filez,Try pyftsubset --help for more information.
)rl  	__usage__sysstderrr   r(   r   usager  ^  s!    	(ICJJ/	
9

Kr(   z%make one with everything (TOTAL TIME)c           
         SSK Jn  SSKJn  U c  [        R
                  SS n SU ;   a  [        [        5        g[        5       n UR                  U / SQS9n [        U 5      S:  a  [        5         gU" UR                  (       a  [        R                   O[        R"                  S9  UR$                  (       a.  [&        R(                  R+                  [        R,                  5        OS[&        R(                  l        U S   nU SS n [1        US9nSn/ n/ n	/ n
SnSnSnU  GH  nUS:X  a  SnM  UR3                  S5      (       a  USS nM+  UR3                  S5      (       a	  XSS -  nMJ  UR3                  S5      (       a:  [5        USS SS9 nXR7                  5       R9                  SS5      -  nSSS5        M  UR3                  S5      (       a+  USS S:X  a  SnOU
R;                  [=        USS 5      5        M  UR3                  S5      (       a]  [5        USS 5       nUR?                  5        H/  nU
R;                  [=        URA                  S5      S   5      5        M1     SSS5        GMN  UR3                  S 5      (       a   U	R;                  [C        USS 5      5        GM  UR3                  S!5      (       a]  [5        USS 5       nUR?                  5        H/  nU	R;                  [C        URA                  S5      S   5      5        M1     SSS5        GM  UR3                  S"5      (       a,  US#S S:X  a  SnOUR;                  [E        US#S 5      5        GM9  UR3                  S$5      (       a]  [5        USS 5       nUR?                  5        H/  nUR;                  [E        URA                  S5      S   5      5        M1     SSS5        GM  URG                  U5        GM     URH                  (       + =(       a    U(       + nURJ                  n[M        XSUUS%9nUc8  URN                  b  S&URN                  RQ                  5       -   OSn[S        UUSS'S(9n['        S)5         U(       a  UR;                  URU                  5       5        U(       a  US*   RV                   H~  nURY                  5       (       d  M  U
R;                  URZ                  R]                  5       5        UR^                  S:X  d  MU  U
R;                  UR`                  R]                  5       5        M     SU;  d   e SSS5        [b        Re                  S+U-  5        [b        Re                  S,U
5        [b        Re                  S-U5        [b        Re                  S.U	5        URg                  XXS/9  URi                  U5        [k        UXs5        UR                  (       aj  SSK6n[b        Re                  S0URn                  Rq                  U5      U4-  5        [b        Re                  S1URn                  Rq                  U5      U4-  5        URr                  (       a  URu                  [        Rv                  5        URy                  5         g! UR                   a-  n[        5         [        S	U[        R                  S
9   SnAgSnAff = f! , (       d  f       GN= f! , (       d  f       GNg= f! , (       d  f       GN= f! , (       d  f       GN-= f! , (       d  f       GN= f)2z%OpenType font subsetter and optimizerr   )splitext)configLoggerNr   z--help)	r  z	gids-filer%   zglyphs-filer  z	text-filer  zunicodes-filezoutput-file)ro  zERROR:r  r   )levelT)r   Fr!  r   z--output-file=r  z--text=   z--text-file=r  zutf-8)encoding
z--unicodes=   z--unicodes-file=r  #z--gids=z--gids-file=z	--glyphs=	   z--glyphs-file=)r  r\  rW  z.subset)	extension	overWritesuffixzcompile glyph listr  z
Text: '%s'zUnicodes: %sz
Glyphs: %szGids: %s)r%   r  r  r  zInput font:% 7d bytes: %szSubset font:% 7d bytes: %s)=os.pathr  	fontToolsr	  r  rn  rl  __doc__r  rw  r  r  r  r/   rW  loggingINFOWARNINGrX  r  r)   setLevelDEBUGdisabledr}  rw  openreadrk  r  r  	readlinesrZ  r  r  r"  r  r\  r  rR  r  r   r  r  r  r  r   r  r  r  r!   r  r?   r  ospathgetsizerY  saveXMLstdoutclose)argsr  r	  r   efontfile	subsetterr  r%   r  r  wildcard_glyphswildcard_unicodesr  r   r  liner  r\  r&   extr  r   s                          r   mainr.  c  st    !&|xx|4giG!!
 " 
& 4y1}ww||GOOL~~gmm, $AwH8D'*IGFDHOD8"O<<())fG<<	""abEMD<<''afw/1((r22 0<<&&v}$(!qv 67<<*++afKKMDOON4::c?13E$FG *  <<	""KK
1QR5)*<<''afKKMDKK
4::c?1+= >? *  <<$$u|"&l1QR512<<())afKKMDMM,tzz#q/A"BC *  aY \ %000?Z<<D.@tD .5nn.HcGNN((**d$tI
 
#	$MM$,,./&\((;;==OOAFFKKM2xx2~ 		(89	 )
  
% HH\D !HH^X&HH\6"HHZf(NTdG%,0I8/TTU-1I70SST{{SZZ JJLe  h

+J 0/   $ 
%	$sd   Y- 	#Z-AZ?A[9A[#A[517[5,5[5-Z*=#Z%%Z*-
Z<	?
[	
[ 	#
[2	5
\)r  r}  r  r  r  r  r  r.  r   )FT)F)T)r   FT)r  r   fontTools.misc.roundToolsr   r   fontTools.ttLib.tablesr   fontTools.ttLib.tables.otBaser   fontTools.otlLib.maxContextCalcr   fontTools.pens.basePenr	   fontTools.misc.loggingToolsr
   fontTools.misc.cliToolsr   fontTools.subset.utilr   r   fontTools.subset.cfffontTools.subset.svgfontTools.varLibr   r   fontTools.ttLib.tables._n_a_m_er   r  ru  arrayr  collectionsr   r   	functoolsr   typesr   r  r  	getLoggerr  r'   r%   r  r,   r4   r   r7   r<   r?   rC   rN  rS   SingleSubstrf   rj   MultipleSubstAlternateSubstLigatureSubstReverseChainSingleSubstDevicer   ValueRecordr   	SinglePosr   PairPos
CursivePosAnchorMarkBasePos
MarkLigPosMarkMarkPosr  r  ContextSubstChainContextSubst
ContextPosChainContextPosr  r  ExtensionSubstExtensionPosr  r  r  r  r  rG  r
  r  rE  r%  r'  r#  r.  rF  rM  rN  rR  rU  re  rg  rk  rp  r  r  r  MathGlyphConstructionrU  rb  rc  rd  rk  r  r  r|  r  r  r}  r  r  r  r  r  r  r.  __all__r   r(   r   <module>rV     s  
  -  + ? 6 * - 6 9 " " 4 = 
    ,  A	 Uc P *+Q S)
 	W&&'?@A%0
 XA  A
 X6  6
 X   X9  9
 X   XS  S X  & XP  P
 X!!"K #K X!!" # X##$# %# X##$ % X$$%Y &Y X$$%! &! X##$ % X##$  %  X--.
5 /
5 X--.5 /5( X__) ) X!!"  #  X 5 !5 X  !> X*5 *5Z X7 7( X  !	5 "	5 X__	 	 X  ! " X!!"5 #54 X!!"	 #	 X  !5 "5> X  ! " X!!"5 #54 X!!"	 #	 $$		 $$ $$

 (1183S3S 	 	W?W?t X""H$>$>?l5 @l5^ 	W5W5t 	&5&5R 	55& X$$%5 &5 X$$%5 &5 X$$h&;&;<5 =5 X$$h&;&;<5 =5 X$$h&;&;<5 =5 X$$h&;&;<5 =5 X__) )( X__	$ 	$ X__  X__) )
 X__I I X__E E X  !N "N
 X  ! " X  !) ") X  ! " X  !" ""* X  X!!"
 #
 X!!" # X!!"# ## X../ 0 X''( ) X''(	 )	 X../	( 0	( X''(, )," X$$h&6&67D 8D X$$h&6&67' 8' X__: : X__0 0 X  !	" "	" X  !Y "Y
 U  () * U  () * U  () * U  () *: U  (%*=*=f*EF G U  (%*=*=f*EF9 G9 U  (%*=*=f*EF
 G
, U  (%*=*=f*EF= G= U  (%*=*=f*EF, G,. U  (%*=*=f*EF
 G
$ U  (%*=*=f*EF8 G84 U  (%*=*=f*EF
 G
  U  (%*=*=f*EF G U  (%*=*=f*EF2 G2> U  (%*=*=f*EF+ G+\ U  () *D=4 U  () *D U  ()! *! U  ()	! *	! U  () * U  () * U  () * U  ()" *" U  ()* ** U  () *& U  ()@ *@ U  () * U  ()! *! U  ()" *"J U  ()' *'T U  () * U  ()@ *@( U  () * U  () *
 U  ()? *?, U  () *: U  ()0 *0f U  ()9( *9(x X++, - X""# $" U  ()A *A U  ()" *"6 U  ()) *)X U  ()2 *2
 X//0- 1- X--./ // X""#$ $$ X##$	 %	 X""# $ U  () * U!!&)//0 1: U  () *  U  () * U  () *& U  () * U  ()9 *90 U  ()
 *
 U  ()? *?D U  () * U  ()
 *
 U  () *> U  () *$f*f f*R@& @&F
 { > >  > 'L
 ./N 0Nb	r(   