§
    ¢”j)  ã                   óÄ  — U d Z ddlZddlmZ ddlmZmZmZmZm	Z	 ddddd	œZ
eeef         ed
<    G d„ de¦  «        Z	 d%dededede	ee         ef         fd„Zdededededede	ee         ef         fd„Zdee         defd„Zdededefd„Zdede	eef         fd„Zdededefd„Zdee         dededefd„Zdededefd „Z G d!„ d"¦  «        Z G d#„ d$¦  «        ZdS )&zÒSparse Bit Set encoding/decoding for IFT (Incremental Font Transfer).

Implements the sparse bit set format defined in the W3C IFT specification:
https://w3c.github.io/IFT/Overview.html#sparse-bit-set-decoding
é    N)Údeque)ÚDictÚIterableÚOptionalÚSetÚTupleé   é   é   é   ©é   é   é   é    Ú_BF_MAX_HEIGHTc                   ó   — e Zd ZdS )ÚSparseBitSetDecodeErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úm/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/misc/iftSparseBitSet.pyr   r      s   € € € € € Ø€Dr   r   ì   ÿÿ ÚdataÚbiasÚmaxValueÚreturnc                 óÐ   — | st          d¦  «        ‚t          | d         ¦  «        \  }}t          |         }||k    rt          d|› d|› d|› �¦  «        ‚t          | ||||¦  «        S )aM  Decode a sparse bit set from binary data.

    Args:
        data: bytes-like object containing the sparse bit set encoding.
        bias: integer added to each decoded value.

    Returns:
        A tuple (values, bytesConsumed) where values is a set of integers
        and bytesConsumed is the number of bytes read from data.
    z
Empty datar   zHeight z exceeds max z for branch factor )r   Ú_decodeHeaderr   Ú_decodeImpl)r   r   r   ÚbranchFactorÚheightÚ	maxHeights         r   Údecoder&      sŠ   € ð ð 4Ý% lÑ3Ô3Ð3å(¨¨a¬Ñ1Ô1Ñ€L�&å˜|Ô,€IØ�	ÒÐÝ%ØW�fÐWÐW¨9ÐWÐWÈÐWÐWñ
ô 
ð 	
õ �t˜\¨6°4¸ÑBÔBÐBr   r#   r$   c                 ó`  — |dk    rt          ¦   «         dfS t          | |¦  «        }t          ¦   «         }t          ¦   «         }|                     d¦  «         |�r?|                     ¦   «         \  }}	|                     ¦   «         }
|
€t          d¦  «        ‚|
dk    rg||	z
  dz   }||z  }||z   }||k    rŒ^t          |||z   dz
  |z   ¦  «        }|dk     rd}||k    r&|                     t          ||dz   ¦  «        ¦  «         Œ¬||	z
  }||z  }	 t          |
d¦  «        }|dk    rnq|	|k    r?||z   |z   }||k    r|                     ¦   «          nH|dk    r|                     |¦  «         n"||z  }|                     ||z   |	dz   f¦  «         |
d|z   z  }
Œˆ|�°?||                     ¦   «         fS )Nr   é   )r   r(   zUnexpected end of dataTr   )ÚsetÚ_InputBitStreamr   ÚappendÚpopleftÚnextr   ÚminÚupdateÚrangeÚ_trailingZerosÚclearÚaddÚbytesConsumed)r   r#   r$   r   r   Ú	bitStreamÚresultÚqueueÚstartÚdepthÚbitsÚexpÚnodeSizeÚ	fillStartÚfillEndÚnextNodeSizeÚbitIndexÚvalÚ
startDeltas                      r   r"   r"   1   s  € ð �‚{€{å‘”�qˆzÐå  lÑ3Ô3€IÝ‘u”u€Fõ %*¡G¤G€EØ	‡L‚L�ÑÔÐà
ñ &%Ø—}’}‘”‰ˆˆuØ�~Š~ÑÔˆØˆ<Ý)Ð*BÑCÔCÐCð �1Š9ˆ9Ø˜5‘. 1Ñ$ˆCØ# SÑ(ˆHØ ™ˆIØ˜8Ò#Ð#ØÝ˜( E¨HÑ$4°qÑ$8¸4Ñ$?Ñ@Ô@ˆGØ˜1Š}ˆ}Ø�	Ø˜GÒ#Ð#Ø—’�e I¨w¸©{Ñ;Ô;Ñ<Ô<Ð<Øð �u‰nˆØ# SÑ(ˆð	%Ý% d¨BÑ/Ô/ˆHØ˜2Š~ˆ~ØØ˜ŠˆØ˜hÑ&¨Ñ-�Ø˜’>�>Ø—K’K‘M”M�MØØ˜!’8�8Ø—J’J˜s‘O”O�Oøà%¨Ñ4�
Ø—’˜e jÑ0°%¸!±)Ð<Ñ=Ô=Ð=Ø�a˜8‘mÐ$Ñ$ˆDð	%ð1 ñ &%ðP �I×+Ò+Ñ-Ô-Ð.Ð.r   Úvaluesc                 ót  — t          t          | ¦  «        ¦  «        }|st          dd¦  «        S |d         }t          |¦  «        }d}dD ]Y}t          ||¦  «        }|t          |         k    rŒ$t          |||¦  «        }|� t          |¦  «        t          |¦  «        k     r|}ŒZ|€t          d|› �¦  «        ‚|S )zøEncode a set of integers as a sparse bit set.

    Tries all branching factors and returns the shortest encoding.

    Args:
        values: iterable of non-negative integers.

    Returns:
        bytes containing the sparse bit set encoding.
    r   r   éÿÿÿÿNr   zCannot encode max value )Úsortedr)   Ú_encodeHeaderÚ_treeHeightr   Ú_encodeWithBfÚlenÚ
ValueError)rC   ÚvaluesSortedr   ÚvalueSetÚbestr#   r$   Úencodeds           r   ÚencoderP   j   sÏ   € õ �#˜f™+œ+Ñ&Ô&€LØð #Ý˜Q Ñ"Ô"Ð"à˜BÔ€HÝ�<Ñ Ô €Hà €DØ%ð ð ˆÝ˜\¨8Ñ4Ô4ˆØ•N <Ô0Ò0Ð0ØÝ ¨,¸Ñ?Ô?ˆØˆ<�3˜w™<œ<­#¨d©)¬)Ò3Ð3ØˆDøà€|ÝÐ>°HÐ>Ð>Ñ?Ô?Ð?Ø€Kr   c                 óH   — dddddœ}t          |dz  ||          z  g¦  «        S )Nr   r(   r   é   r   )Úbytes)r#   r$   ÚbranchFactorToIds      r   rG   rG   Š   s4   € Ø  q¨aÐ0Ð0ÐÝ�6˜Q‘;Ð"2°<Ô"@Ñ@ÐAÑBÔBÐBr   Ú
headerBytec                 ó>   — | dz  }dddddœ}| dz	  dz  }||         |fS )NrR   r   r   r   r   )r   r(   r   rR   r	   r   )rU   ÚidÚidToBranchFactorr$   s       r   r!   r!   �   s<   € Ø	�dÑ	€BØ  q¨RÐ0Ð0ÐØ˜A‰o Ñ%€FØ˜BÔ Ð'Ð'r   c                 ó:   — d}| }||k    r|| z  }|dz  }||k    °|S )z<Return the minimum tree height needed to represent maxValue.r(   r   )r#   r   r$   Úcapacitys       r   rH   rH   –   s>   € à€FØ€HØ
�hÒ
Ð
Ø�LÑ ˆØ�!‰ˆð �hÒ
Ð
ð €Mr   rM   c                 óº  ‡— |dk    rt          |d¦  «        S i g}| D ]:}||z  }||z  }||d         vrd|d         |<   |d         |xx         d|z  z  cc<   Œ;t          d|¦  «        D ]a}|d         }i }	|                     ¦   «         D ]+\  }}
||z  }||z  }||	vrd|	|<   |	|xx         d|z  z  cc<   Œ,|                     |	¦  «         Œbt	          | ¦  «        Šdt
          dt
          dt
          fˆfd„}t          |¦  «        }||z  }t          ddd|dz
  fg¦  «        }|�r|                     ¦   «         \  }}}}|dz
  |z
  }d|cxk    rt          |¦  «        k     rn n||          
                    |d¦  «        nd}
||dz
  k     r, |||¦  «        ||z
  dz   k    r|                     d¦  «         Œ”|                     |
¦  «         |
dk    rg||dz
  k     r^||z
  dz   |z  }|
}|rOt          |d¦  «        }||z  |z   }|||z  z   }||z   dz
  }|                     ||dz   ||f¦  «         |d|z   z  }|°O|�°t          ||¦  «        |                     ¦   «         z   S )	Nr   r(   rE   ÚloÚhir   c                 óZ   •— t          j        ‰|¦  «        t          j        ‰| ¦  «        z
  S ©N)ÚbisectÚbisect_rightÚbisect_left)r\   r]   rL   s     €r   Ú
rangeCountz!_encodeWithBf.<locals>.rangeCount½   s1   ø€ ÝÔ" <°Ñ4Ô4µvÔ7IØ˜"ñ8
ô 8
ñ 
ð 	
r   r   )rG   r0   Úitemsr+   rF   ÚintÚ_OutputBitStreamr   r,   rJ   ÚgetÚwriter1   ÚtoBytes)rM   r#   r$   ÚlayersÚvÚ	nodeIndexÚbitPosÚ_Ú	prevLayerÚnewLayerÚbitmaskÚparentIndexrc   ÚstreamÚsubtreeSizer7   r9   Ú
rangeStartÚrangeEndÚlayerIdxÚ	childSizer:   r@   Ú
childIndexÚ
childStartÚchildEndrL   s                             @r   rI   rI       sQ  ø€ Ø�‚{€{Ý˜\¨1Ñ-Ô-Ð-ð %' 4€Fàð ,ð ,ˆØ˜Ñ%ˆ	Ø�\Ñ!ˆØ˜F 1œIÐ%Ð%Ø#$ˆF�1ŒI�iÑ ØˆqŒ	�)ÐÐÔ  V¡Ñ+ÐÐÑÐå�1�fÑÔð 	 ð 	 ˆØ˜2”Jˆ	Ø#%ˆØ"+§/¢/Ñ"3Ô"3ð 	1ð 	1ÑˆI�wØ# |Ñ3ˆKØ Ñ-ˆFØ (Ð*Ð*Ø()�˜Ñ%Ø�[Ð!Ð!Ô! Q¨&¡[Ñ0Ð!Ð!Ñ!Ð!Ø�Š�hÑÔÐÐõ ˜(Ñ#Ô#€Lð
•sð 
¥ð 
­ð 
ð 
ð 
ð 
ð 
ð 
õ ˜lÑ+Ô+€FØ Ñ&€KÝ.3°a¸¸A¸{ÈQ¹Ð5OÐ4PÑ.QÔ.Q€Eà
ñ )Ø16·²±´Ñ.ˆ	�5˜* hØ˜A‘: Ñ%ˆð 34°xÐ2MÐ2MÒ2MÐ2MÅ#ÀfÁ+Ä+Ò2MÐ2MÐ2MÐ2MÐ2MˆF�8Ô× Ò  ¨AÑ.Ô.Ð.ÐSTð 	ð �F˜Q‘JÒÐØ�
˜: xÑ0Ô0°H¸zÑ4IÈAÑ4MÒMÐMà�LŠL˜‰OŒOˆOØà�Š�WÑÔÐà�aŠ<ˆ<˜E F¨Q¡JÒ.Ð.Ø! JÑ.°Ñ2°|ÑCˆIØˆDØð )Ý)¨$°Ñ3Ô3�Ø&¨Ñ5¸Ñ@�
Ø'¨(°YÑ*>Ñ>�
Ø%¨	Ñ1°AÑ5�Ø—’˜j¨%°!©)°ZÀÐJÑKÔKÐKØ˜!˜x™-Ð(Ñ(�ð ð )ð/ ñ )õ> ˜ vÑ.Ô.°·²Ñ1AÔ1AÑAÐAr   rA   ÚmaxBitsc                 óR   — | dk    r|S d}| dz  dk    r| dz  } |dz  }| dz  dk    °|S ©Nr   r(   r   )rA   r|   Úcounts      r   r1   r1   ê   sJ   € Ø
ˆa‚x€xØˆØ€EØ�‰7�qŠ.ˆ.Ø�‰	ˆØ�‰
ˆð �‰7�qŠ.ˆ.ð €Lr   c                   óF   — e Zd ZdZdedefd„Zdee         fd„Zdefd„Z	dS )	r*   zBReads bit nodes from a byte array, starting after the header byte.r   r#   c                 ó>   — || _         || _        d| _        d| _        d S )Nr(   r   )r   r#   Ú	byteIndexÚsubIndex)Úselfr   r#   s      r   Ú__init__z_InputBitStream.__init__÷   s#   € ØˆŒ	Ø(ˆÔØˆŒØˆŒˆˆr   r   c                 ó¼  — | j         dv r‚| j        t          | j        ¦  «        k    rd S d| j         z  dz
  }| j        | j                 | j        z	  |z  }| xj        | j         z  c_        | j        dk    rd| _        | xj        dz  c_        |S | j         dk    rC| j        t          | j        ¦  «        k    rd S | j        | j                 }| xj        dz  c_        |S | j         dk    rw| j        dz   t          | j        ¦  «        k    rd S | j        }| j        }||         ||dz            dz  z  ||dz            dz  z  ||dz            d	z  z  }| xj        d
z  c_        |S d S )N©r   r   r(   r   r   r   rR   r   r
   é   r   )r#   r‚   rJ   r   rƒ   )r„   ÚmaskrA   ÚbÚis        r   r-   z_InputBitStream.nextý   sn  € ØÔ Ð&Ð&ØŒ~¥ T¤Y¡¤Ò/Ð/Ø�tØ˜Ô*Ñ*¨aÑ/ˆDØ”9˜Tœ^Ô,°´Ñ=ÀÑEˆCØˆMŒM˜TÔ.Ñ.ˆMŒMØŒ} Ò!Ð!Ø !�”Ø�” !Ñ#�”ØˆJØÔ !Ò#Ð#ØŒ~¥ T¤Y¡¤Ò/Ð/Ø�tØ”)˜DœNÔ+ˆCØˆNŒN˜aÑˆNŒNØˆJØÔ "Ò$Ð$ØŒ~ Ñ!¥S¨¬¡^¤^Ò3Ð3Ø�tØ”	ˆAØ”ˆAØ�A”$˜!˜A ™Eœ( a™-Ñ(¨A¨a°!©e¬H¸©NÑ;¸qÀÀQÁ¼xÈ2¹~ÑNˆCØˆNŒN˜aÑˆNŒNØˆJØˆtr   c                 ó0   — | j         | j        dk    rdndz   S r~   )r‚   rƒ   ©r„   s    r   r4   z_InputBitStream.bytesConsumed  s   € ØŒ~ d¤m°aÒ&7Ð&7  ¸QÑ?Ð?r   N)
r   r   r   Ú__doc__rS   re   r…   r   r-   r4   r   r   r   r*   r*   ô   s}   € € € € € ØLÐLð˜Uð °#ð ð ð ð ð�h˜s”mð ð ð ð ð6@˜sð @ð @ð @ð @ð @ð @r   r*   c                   ó:   — e Zd ZdZdefd„Zdeddfd„Zdefd„ZdS )	rf   z#Writes bit nodes into a byte array.r#   c                 óH   — || _         t          ¦   «         | _        d| _        d S )Nr   )r#   Ú	bytearrayr   rƒ   )r„   r#   s     r   r…   z_OutputBitStream.__init__  s    € Ø(ˆÔÝ‘K”KˆŒ	ØˆŒˆˆr   Úvaluer   Nc                 ó~  — | j         dv rd| j         z  dz
  }||z  }| j        dk    r| j                             d¦  «         | j        dxx         || j        z  z  cc<   | xj        | j         z  c_        | j        dk    r	d| _        d S d S | j         dk    r| j                             |dz  ¦  «         d S | j         dk    r| j                             |dz  ¦  «         | j                             |dz	  dz  ¦  «         | j                             |dz	  dz  ¦  «         | j                             |d	z	  dz  ¦  «         d S d S )
Nr‡   r(   r   rE   r   éÿ   r   r
   rˆ   )r#   rƒ   r   r+   )r„   r’   r‰   s      r   rh   z_OutputBitStream.write$  sa  € ØÔ Ð&Ð&Ø˜Ô*Ñ*¨aÑ/ˆDØ�T‰MˆEØŒ} Ò!Ð!Ø”	× Ò  Ñ#Ô#Ð#ØŒI�bˆMˆMŒM˜U d¤mÑ3Ñ3ˆMˆM‰MØˆMŒM˜TÔ.Ñ.ˆMŒMØŒ} Ò!Ð!Ø !�”��ð "Ð!àÔ !Ò#Ð#ØŒI×Ò˜U T™\Ñ*Ô*Ð*Ð*Ð*ØÔ "Ò$Ð$ØŒI×Ò˜U T™\Ñ*Ô*Ð*ØŒI×Ò˜e q™j¨DÑ0Ñ1Ô1Ð1ØŒI×Ò˜e r™k¨TÑ1Ñ2Ô2Ð2ØŒI×Ò˜e r™k¨TÑ1Ñ2Ô2Ð2Ð2Ð2ð	 %Ð$r   c                 ó*   — t          | j        ¦  «        S r_   )rS   r   r�   s    r   ri   z_OutputBitStream.toBytes6  s   € Ý�T”YÑÔÐr   )	r   r   r   rŽ   re   r…   rh   rS   ri   r   r   r   rf   rf     sr   € € € € € Ø-Ð-ð Sð ð ð ð ð
3˜3ð 3 4ð 3ð 3ð 3ð 3ð$ ˜ð  ð  ð  ð  ð  ð  r   rf   )r   r   )rŽ   r`   Úcollectionsr   Útypingr   r   r   r   r   r   re   Ú__annotations__Ú	Exceptionr   rS   r&   r"   rP   rG   r!   rH   rI   r1   r*   rf   r   r   r   ú<module>rš      sÌ  ððð ð ð €€€Ø Ð Ð Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7ð &(¨B°2¸1Ð!=Ð!=€��S˜#�X”Ð =Ð =Ñ =ð	ð 	ð 	ð 	ð 	˜iñ 	ô 	ð 	ð
 1;ðCð CØ
ðCØðCØ*-ðCà
ˆ3ˆsŒ8�Sˆ=ÔðCð Cð Cð Cð66/Ø
ð6/Ø"ð6/Ø,/ð6/Ø7:ð6/ØFIð6/à
ˆ3ˆsŒ8�Sˆ=Ôð6/ð 6/ð 6/ð 6/ðr�8˜C”=ð  Uð ð ð ð ð@C ð C¨Sð C°Uð Cð Cð Cð Cð
(˜cð ( e¨C°¨H¤oð (ð (ð (ð (ð˜cð ¨Sð °Sð ð ð ð ðGB˜C œHð GB°Cð GBÀð GBÈð GBð GBð GBð GBðT˜ð  cð ¨cð ð ð ð ð%@ð %@ð %@ð %@ð %@ñ %@ô %@ð %@ðP ð  ð  ð  ð  ñ  ô  ð  ð  ð  r   