a XC?h9��@sdZddlZGdd�dej�ZGdd�dej�ZGdd�dej�ZGd d �d eej�ZGd d �d eej�Zd d�Ze�e d��Z e � ddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;dd?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d����d�Z dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��d�d�d�d�d�d�d�d�d�d �d �d �d �d �d�d�dd(d�d;�ddhd�d}dtd'd�dmd9d6d`dHdd+d4d|ddd!d#d3d�d&d�d~d:d>d2d�d�dvd�d�d�d�d�ddr�ddsdpdxd)d.d-d5dNdVddd�d�d�dddd�dd1dd0�dd��dd"�d�d�d�d �d!�d"�d#�d$�d%d=�d&�d'dad_�d(dM�d)d�d*d$�d+�d,d,�d-�d.dd�d/du�d0d%dd�dyd8dGd{dWddFdEddfd7d d?dddu�  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤Ã�ÂÀ©╣║╗â•�¢¥â”�└┴┬├─┼ãÃ╚╔╩╦╠â•�╬¤ðÃ�ÊËÈıÃ�ÃŽÃ�┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýÃ�¯´­±‗¾¶§÷¸°¨·¹³²■ ��������� � � � � ������������������� �!�"�#�$�%�&�'�(�)�*�+�,�-�.�/�0�1�2�3�4�5�6�7�8�9�:�;�<�=�>�?�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�(rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrrr r r r r rrrrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBrCrDr�rSrcrBrurdr�r�r�r^rLrTrPr�rOr�r�r�r�r�r�r�r�r�r�r�rMrUrRrQr�rNr]r[r\rmr4r5r8r&rzr6rxryr�r|r}r~rwrKr�r�r�r�r?rDrCr�r�r�r@r�r�r�r+rFr)rlr*r,r7r-r0r(r.r/r3rGr2r1rvrJr;rHr9r�r:r�rAr=rIr<r'r�r�r>r{rEr�rjrYr�rerfrrirZrhrgrkrsr`rorarnrbrrr_rqrprtr�r�r�rVrWrXr�)�__doc__rrrrrrr$�make_identity_dict�range� decoding_map�updaterrr r r r �s$ ����