3 \��@s�dZddlZdd�Zdd�Zdd�Zd d �Zd d �Zd Zdd�Zdd�Z dd�Z dd�Z dd�Z dd�Z dd�ZGdd�dej�ZGdd�dej�ZGd d!�d!ej�ZGd"d#�d#eej�ZGd$d%�d%eej�Zd&d'�ZdS)(uY Codec for the Punicode encoding, as specified in RFC 3492 Written by Martin v. Löwis. �NcCsTt�}t�}x2|D]*}t|�dkr2|jt|��q|j|�qWt|�}t|�|fS)z 3.1 Basic code point segregation�)� bytearray�set�ord�append�add�sorted�bytes)�str�base�extended�c�r�*/usr/lib64/python3.6/encodings/punycode.py� segregate s  rcCs*d}x |D]}t|�|kr |d7}q W|S)z@Return the length of str, considering only characters below max.r�)r)r �max�resr rrr� selective_lens    rcCsRt|�}xD|d7}||krdS||}||kr:|d|fS||kr |d7}q WdS)aReturn a pair (index, pos), indicating the next occurrence of char in str. index is the position of the character considering only ordinals up to and including char, and pos is the position in the full string. index/pos is the starting position in the full string.rN�����r)rr)�len)r �char�index�pos�lr rrr�selective_finds rc Cs�d}g}d}x~|D]v}d}}t|�}t||�} | d||} xBt||||�\}}|dkr^P| ||7} |j| d�|}d} qBW|}qW|S)z3.2 Insertion unsort codingrrrrrr)rrrr) r r Zoldchar�resultZoldindexr rrrZcurlen�deltarrr�insertion_unsort0s$   rcCs,d|d|}|dkrdS|dkr(dS|S)N�$r�r)�j�biasrrrr�TFs r#s$abcdefghijklmnopqrstuvwxyz0123456789cCsrt�}d}xbt||�}||kr4|jt|�t|�S|jt|||d|�||d|}|d7}q WdS)z(3.3 Generalized variable-length integersrrrN)rr#r�digitsr )�Nr"rr!�trrr�generate_generalized_integerNs r'cCs\|r|d}n|d}|||7}d}x|dkrB|d}|d7}q(W|d||d}|S)Ni��ri��#r�&r)r�first�numcharsZ divisionsr"rrr�adapt[s    r-cCsTt�}d}x@t|�D]4\}}t||�}|j|�t||dk||d�}qWt|�S)z3.4 Bias adaptation�Hrr)r� enumerater'�extendr-r )Zbaselen�deltasrr"Zpointsr�srrr�generate_integersjs  r3cCs8t|�\}}t||�}tt|�|�}|r4|d|S|S)N�-)rrr3r)�textr r r1rrr�punycode_encodeus    r6c Cs�d}d}d}x�yt||�}Wn,tk rJ|dkr>td��|ddfSX|d7}d|kofdknrv|d}nDd|ko�d knr�|d }n"|dkr�td ||��n|dfSt||�} |||7}|| kr�||fS|d | }|d7}qWdS) z(3.3 Generalized variable-length integersrr�strictzincomplete punicode stringN�A�Z�0�9�z Invalid extended code point '%s'r)r� IndexError� UnicodeErrorr#) r �extposr"�errorsr�wr!rZdigitr&rrr�decode_generalized_numbers2     rBc Cs�d}d }d}d}x�|t|�kr�t||||�\}}|dkr<|S||d7}||t|�d7}|dkr�|dkrxtd|��td �}|t|�d}|d|�t|�||d�}t||dkt|��}|}qW|S) z3.2 Insertion unsort codingrrr.rNi��r7zInvalid character U+%x�?r)rrBr>r�chrr-) r r r@rrr"r?Znewposrrrr�insertion_sort�s(    rEcCs�t|t�r|jd�}t|t�r&t|�}|jd�}|dkrLd}t|d�j�}n.t|d|�d|�}t||dd�d�j�}t|||�S)N�asciir4r�r)� isinstancer �encode� memoryviewr �rfind�upperrE)r5r@rr r rrr�punycode_decode�s    rMc@s eZdZddd�Zddd�ZdS) �Codecr7cCst|�}|t|�fS)N)r6r)�self�inputr@rrrrrI�sz Codec.encodecCs*|dkrtd|��t||�}|t|�fS)Nr7�replace�ignorezUnsupported error handling )r7rQrR)r>rMr)rOrPr@rrrr�decode�s  z Codec.decodeN)r7)r7)�__name__� __module__� __qualname__rIrSrrrrrN�s rNc@seZdZddd�ZdS)�IncrementalEncoderFcCst|�S)N)r6)rOrP�finalrrrrI�szIncrementalEncoder.encodeN)F)rTrUrVrIrrrrrW�srWc@seZdZddd�ZdS)�IncrementalDecoderFcCs$|jdkrtd|j��t||j�S)Nr7rQrRzUnsupported error handling )r7rQrR)r@r>rM)rOrPrXrrrrS�s zIncrementalDecoder.decodeN)F)rTrUrVrSrrrrrY�srYc@s eZdZdS)� StreamWriterN)rTrUrVrrrrrZ�srZc@s eZdZdS)� StreamReaderN)rTrUrVrrrrr[�sr[c Cs tjdt�jt�jttttd�S)NZpunycode)�namerIrS�incrementalencoder�incrementaldecoder� streamwriter� streamreader) �codecs� CodecInforNrIrSrWrYrZr[rrrr� getregentry�src)�__doc__rarrrrr#r$r'r-r3r6rBrErMrNrWrYrZr[rcrrrr�s(