� c��jv� ��� ddlZddlZddlZddlZddl�ddlmZmZmZm Z m Z m Z m Z m Z gd�ezZ[ejejej eeefZedZdedfedfed ffZed Zd Zed Zed ZedZedZ edZ!edZ"edZ#edZ$edZ%edZ&edZ'edZ(e)e*�Z+e,e�Z-e.e+�D��cgc]\}}|j_d�s�|��c}}Z0e1e0e �D]\Z2Z3e3e+e2<e2e-e3<�e jh�D���cic]\}}|D]}||���c}}}Z5d�Z6ddddddd�d�Z7dddddd�d�Z8dd d!d"d#d$d%d&d'd(d)� Z9d*�Z:Gd+�d,�Z;e;�Zd/�Z?d0�Z@d1�ZAdd2�d3�ZBej�d4gd5�dgd6z�7�ZDej�d8gd9�dg�7�ZEd:eEjT_Fd;eEj_FdeEj�_Fd?eEj�_Fd@eEj�_FdAeEj�_FdBeEj�_Fej�dCdD�ZNdEZOdFZPGdG�dHeE�ZQddddI�dJ�ZRdK�ZSdL�ZTdM�ZUdN�ZVdO�ZWdP�ZX dedR�ZYdfdddd�dS�ZZddddd�dT�Z[ dgdddQdddU�dV�Z\dW�Z]eZZ^dXZ_dYe_dZz zZ`d[�Zad\�Zbd]�Zcd^�Zdd_�ZeGd`�da�Zfdddb�Zgehdck(reg�yycc}}wcc}}}w)h�N)�*)�__all__� _cache_format�_inline_cache_entries�_nb_ops�_intrinsic_1_descs�_intrinsic_2_descs�_specializations�_specialized_instructions) � code_info�dis� disassemble�distb�disco�findlinestarts� findlabels� show_code�get_instructions� Instruction�Bytecode� FORMAT_VALUE�N��str�repr�ascii� MAKE_FUNCTION)�defaults� kwdefaults� annotations�closure� LOAD_CONST� RETURN_CONST� LOAD_GLOBAL� BINARY_OP� JUMP_BACKWARD�FOR_ITER�SEND� LOAD_ATTR�LOAD_SUPER_ATTR�CALL_INTRINSIC_1�CALL_INTRINSIC_2�CACHE�c�Z� |�a ttd�rtjj}ntj}|jr|j}|jr�t|jj|j|||��y#t $r t d�d�wxYw)N�last_excz no last traceback to disassembler>) rH�sysrZ� __traceback__�last_traceback�AttributeError� RuntimeError�tb_nextr�tb_frame�f_code�tb_lasti)�tbr9r;r<s r6rrzs���<� �z� M��s�J�'��\�\�/�/���'�'���j�j�r�z�z�"�b�j�j��� � �"�"�B�K�K�d� �^f�g��� M��A�B�� L� M�s �;B�B*� OPTIMIZED� NEWLOCALS�VARARGS� VARKEYWORDS�NESTED� GENERATOR�NOFREE� COROUTINE�ITERABLE_COROUTINE�ASYNC_GENERATOR) ������ �@��ic �� g}td�D]D}d|z}||zs�|jtj|t |���||z}|r�Dn|jt |��dj |�S)Nrtro�, )�range�append�COMPILER_FLAG_NAMES�get�hex�join)�flags�names�i�flags r6� pretty_flagsr��sv��5� �E� �2�Y���!�t�� �4�<� �L�L�,�0�0��s�4�y�A� B� �T�M�E��� � � � �S��Z� � �9�9�U� ��c��eZdZd�Zy)�_Unknownc��y)Nz ���selfs r6�__repr__z_Unknown.__repr__�s��r�N)rU� __module__� __qualname__r�r�r�r6r�r��s��r�r�c�� t|d�r |j}t|d�r |j}nJt|d�r |j}n1t|d�r |j}nt|d�r |j }t |t�r t|d�}t|d�r|Stdt|�jz��) Nr?r@rArBrCz rFrG) rHr?r@rArBrCrKrr7rNrTrU�rVs r6�_get_code_objectr��s���N��q�*�� �J�J���q�*�� �J�J�� ��I� � �I�I�� ��I� � �I�I�� ��I� � �I�I���!�S�� ��O� ,���q�)���� �>���G�$�$�%� &�&r�c�H�t|}|tvrtt|S|S�N)� _all_opname�deoptmap� _all_opmap)�opr5s r6�_deoptopr��s&�� �r�?�D�)-��)9�:�h�t�n� %�A�r�Ar�c�6�|r |jS|jSr�)�_co_code_adaptiverF)�cor<s r6�_get_code_arrayr��s��#+�2� � �;����;r�c�,� tt|��Sr�)�_format_code_infor�r�s r6r r �s��;� �-�a�0� 1�1r�c��g}|jd|jz�|jd|jz�|jd|jz�|jd|jz�|jd|j z�|jd|j z�|jd|jz�|jdt|j�z�|jr?|jd �t|j�D]}|jd |z��|jr?|jd �t|j�D]}|jd |z��|jr?|jd �t|j�D]}|jd |z��|jr?|jd�t|j�D]}|jd |z��|jr?|jd�t|j�D]}|jd |z��dj!|�S)NzName: %szFilename: %szArgument count: %szPositional-only arguments: %szKw-only arguments: %szNumber of locals: %szStack size: %szFlags: %sz Constants:z%4d: %rzNames:z%4d: %szVariable names:zFree variables:zCell variables:� )r{�co_name� co_filename� co_argcount�co_posonlyargcount�co_kwonlyargcount� co_nlocals� co_stacksizer��co_flags� co_consts� enumerate�co_names� co_varnames� co_freevars� co_cellvarsr)r��lines�i_c�i_ns r6r�r��s��� �E� �L�L�(�2�:�:�5�6� �L�L�(�2�>�>�9�:� �L�L�(�2�>�>�9�:� �L�L�0�2�3H�3H�H�I� �L�L�(�2�+?�+?�?�@� �L�L�(�2�=�=�8�9� �L�L�(�2�?�?�:�;� �L�L�(�<�� � �+D�D�E� �|�|� � � �\�"��R�\�\�*�C� �L�L��S�� )�+� �{�{� � � �X���R�[�[�)�C� �L�L��S�� )�*� �~�~� � � �&�'��R�^�^�,�C� �L�L��S�� )�-� �~�~� � � �&�'��R�^�^�,�C� �L�L��S�� )�-� �~�~� � � �&�'��R�^�^�,�C� �L�L��S�� )�-� �9�9�U� �r�rEc�2� tt|�|��y)NrE)rMr )r�r9s r6rr�s��� �)�B�-�d�#r�� Positions)�lineno� end_lineno� col_offset�end_col_offsetrq)r� _Instruction) �opname�opcode�arg�argval�argrepr�offset� starts_line�is_jump_target� positionsz!Human readable name for operationzNumeric code for operationz6Numeric argument to operation (if any), otherwise Nonez4Resolved arg value (if known), otherwise same as argz0Human readable description of operation argumentz1Start index of operation within bytecode sequencez4Line started by this opcode (if any), otherwise Nonez1True if other code jumps to here, otherwise FalsezPdis.Positions object holding the span of source code covered by this instruction�_ExceptionTableEntryzstart end target depth lasti��c��eZdZ dd�Zy)rc�� g}|rD|j�$d|z}|j||jz�n|jd|z�|r|jd�n|jd�|jr|jd�n|jd�|jt|j�j |��|j|j jt��|j�d|jt|j�j t��|jr!|jd|jzdz�dj|�j�S) Nz%%%dd� z-->z z>>� �(�))r�r{r�rr��rjustr��ljust� _OPNAME_WIDTHr�� _OPARG_WIDTHr�r�rstrip)r�� lineno_width�mark_as_current� offset_width�fields� lineno_fmts r6� _disassemblezInstruction._disassemble0s(�� � �� ����+�$�|�3� �� � �j�4�+;�+;�;�<�� � �c�L�0�1� � �M�M�%� � �M�M�%� � � � � �M�M�$� � �M�M�$� �� � �d�4�;�;�'�-�-�l�;�<�� � �d�k�k�'�'� �6�7� �8�8� � �M�M�$�t�x�x�.�.�.�|�<� =��|�|�� � �c�D�L�L�0�3�6�7��x�x���&�&�(�(r�N)�Frq)rUr�r�r�r�r�r6rr s �� �#)r�r)� first_liner;r<c ��� t|�}tt|��}|�||jz }nd}t t ||�|j |j|j|||j�|��S)Nr)� co_positionsr;) r��dictr�co_firstlineno�_get_instructions_bytesr��_varname_from_opargr�r�r�)rVr�r;r<r�� linestarts� line_offsets r6rrVs{�� � �!� �B��n�R�(�)�J��� �2�#4�#4�4� �� � "�?�2�x�#@�#%�#9�#9�#%�;�;�� � �#-�{�02���0A�/:�  <�z*_get_instructions_bytes..�s(�����$5�2P�$�!�Q�'*�a��d�|�%&�2P�s�rz: r-F)2r�� __getitem__�setrrz�add�_unpack_opargsr}r�r�r�r�hasconstr��hasnamer$r�r)r*�hasjabsr�hasjrelr�haslocal�hasfree� hascompare�cmp_opr�FORMAT_VALUE_CONVERTERSr�rrr��MAKE_FUNCTION_FLAGSr%rr+rr,r rr�rr�rJ�int� from_bytesr[� byteorderr-)r��varname_from_opargr�r�r�r��exception_entriesr�r;r��labelsr�r�r��_r�r�r�r�r�r�r�r��deop�caches� signed_argr5�size�datar�s @r6r�r��s������ � �+�4��8�L��}�t�%�*;�*;�H� ��D�!� "�F�$5� ��s�F�A�q��u�c�"�A� �J�J�v� �#�%6��K�)�$�/����C� � !�$�.�.���6�K��&��{�*� ��6�)�������t�L�"�5�6� ���|��&�t�,�� �?� �F��x��"1�$��Y�"G��������;�&�&4�S�!�V�X�&F�O�F�G��a��W�"+�g�"5���Y�&�&4�S�!�V�X�&F�O�F�G��a��W�"0�7�":���_�,�&4�S�!�V�X�&F�O�F�G��a��W�"0�7�":��&4�S�(�&C�O�F�G�����Q����$�v�,�.�����%6�t�%<�c�T�#� ��!��j��l�2���!�f�*�$���$�v�,�.����!�T�W�_�"0��6H�"I������#���Q���� ����%�"9�#��)�"D���� �$�s�S�y�/�2���!�9���4����}�,�G���&��)�)�$5�)��U0�s�NNc ��� tt|��}t|�}tt ||�||j |j |j||||j�|�� y)N)r9rr�r;) r�rrrRr�r�r�r�r�)r�r�r9r;r<r�rs r6rrs\��$��n�R�(�)�J�.�r�2����r�8�4��b�4�4��{�{�B�L�L�*�4�):�$&�O�O�$5�;� Pr�c���t||||��|�|dkDrS|�|dz }|jD]<}t|d�s�t|��td|�d�|��t |||||���>yy) Nr>rrorFrEzDisassembly of �:r8)rr�rHrMrO)r�r9r:r;r<rVs r6rOrO)sp�����;��J� �}��� � � ��A�I�E����A��q�)�$��4� ��a�1��=�&��D��;�QY�� �"r�)r9r�rr�r;c �D�t|�} | r9t|j��|z} | dk\rtt | ��} nd} nd} t|�dz }|dk\rtt |��}nd}t |||||||| | �� D]�}| xr|j duxr|jdkD}|r t|��| r|j|k(}nD|j|cxkxr/|jdtt|j�zzknc}t|j| ||�|����|rntd |��|D][}|jrd nd }|jdz }td |j�d |�d|j �d|j"�d|�� |���]yy)Ni�r�rrpi'rq�r�rr�r;rEzExceptionTable:z lastirr�z to z -> z [�])r��max�values�lenrr�r�r�rMrr�r�r�r�r�r�r�r:)r�r�rr�r�r�r9r�rr�r;� show_lineno� maxlinenor�� maxoffsetr��instr�new_source_line�is_current_instr�entryr�s r6rRrR6s��� �z�"�K��� �)�)�+�,�{�:� � �� ��s�9�~�.�L��L�� ��D� �A� �I��E���3�y�>�*� �� �(��/A�5�)2�J�5@�;L�6B�5@� B�� '�,� �,�,�D�8�,� �<�<�!�+� � � �t� � �$�|�|�u�4� � %�|�|�u� T��<�<�!�&;�H�U�\�\�)rOr7)r4�kwargss r6rSrScs��F��<���8�C�F�Cr�rtrproc#�K�d}d}tdt|�d�D]g}|r|dz}� ||}t|�}t|}|tvr1||dz|z}|t k(r|dznd}|t k\r|dt zz}nd}d}|||f���iy�w)Nrrprorr)rzr*r�r�hasarg� EXTENDED_ARG� _INT_OVERFLOW)r�� extended_argrr�r�rr�s r6r r os������L� �F� �1�c�$�i�� #�� � �a�K�F� � �!�W����|��&�t�,�� �6�>��q��s�)�l�*�C�)-��)=�C�1�H�1�L��}�,���M� 1�1� ��C��L��"�c�l��'$�s�BBc�� g}t|�D]l\}}}|�� t|�}t|}|tvr"t |�r| }|dz|dzz}|d|zz }n|t vr|dz}n�W||vs�\|j |��n|S)Nrp)r r�rrrrr{)r�rr�r�r�rr�labels r6rr�s���� �F�)�$�/����C� �?��B�<�D�*�4�0�F��w��$�T�*��$�C��� �S��U�*����V��#������A�����F�"�� � �e�$�0� �Mr�c#�fK� d}|j�D]\}}}|�� ||k7s�|}||f���y�wr�)�co_lines)r��lastliner�r��lines r6rr�sJ������H� �M�M�O���s�D� � ��� 0��H���+� �,� �s �1�1� 1c#�K� td}|j}|j}t|j�D���cgc]\}}}|t k7r||f��}}}}t |�D]l\}\}} ||k(s�|dk\s�||dz } ||dz } | dtvs�1| dtvs�=t| d| d|�} t| d| d|�} || | | f���nycc}}}w�w)N� IMPORT_NAMErpror) �opmapr�r�r rFr6r�r r�)r�r@�constsr�rr�r��opargsr��oparg�from_op�level_op�level�fromlists r6� _find_importsrI�s������ � �&�K� �\�\�F� �K�K�E�*8����*D�)�*D�J�A�r�3��<�'��3�i�*D�F�)�#�F�+���;�B�� �� ��a���Q�q�S�k�G��a��c�{�H��� �h�&�8�A�;�(�+B�(��!��h�q�k�6�J��+�G�A�J��� �F�K���U�|�U�H�5�5�,��)�s(��->� >�D� ���r� 2�3��� !���,���!7��!;���&��� �� r�c ��|j}tt||j�|j|j |j |j|j|j|j�|j�� S)Nr&) rRr�r�r<r�r�r�rTrSrr�r;)r�r�s r6�__iter__zBytecode.__iter__�sk�� �\�\��&��r�4�=�=�'I�')�'=�'=�')�{�{�B�L�L�'+�'7�'7�37�3D�3D�9=�9O�9O�46�O�O�4E�37�3C�3C�E� Er�c�b�dj|jj|j�S)Nz{}({!r}))�format� __class__rUrUr�s r6r�zBytecode.__repr__�s*��� � ����!8�!8�!%�!6�!6�8� 8r�)r;r<c�� |jr|j}|jr�||jj|j||��S)N)rPr;r<)r`rarbrc)�clsrdr;r<s r6�from_tracebackzBytecode.from_traceback�sC��=��j�j����B��j�j�� �K�K� � �r�{�{� �^f� � r�c�.� t|j�Sr�)r�rRr�s r6�infoz Bytecode.infos��A� ����.�.r�c��� |j}|j� |j}nd}tj�5}t t ||j �|j|j|j|j|j|||j|j�|j�� |j�cddd�S#1swYyxYw)N�����) rr�r�r�r�r9r�rr�r;)rRrP�io�StringIOrRr�r<r�r�r�rTrSrr�r;�getvalue)r�r�r��outputs r6r z Bytecode.diss���A� �\�\�� � � � *��(�(�F��F� �[�[�]�f� ��r�4�=�=�A�24�2H�2H�%'�[�[�B�L�L�*.�*:�*:�+/�+<�+<�$*�%+�15�1G�1G�,.�O�O�,=�+/�+;�+;� =��?�?�$��]�]�s �BC�C) rUr�r�rVrXr�� classmethodr^r`r r�r�r6rr�sF���)-�T�u�_d� !� E�8��/4�u� �� �/�%r�rc�R�ddl}|j�}|jd|jd�dd��|j |��}|j 5}|j �}ddd�t|j jd�}t|�y#1swY�6xYw) Nr�infile�rb�?�-)rT�nargs�default)�argsr1) �argparse�ArgumentParser� add_argument�FileType� parse_argsri�readr2r5r )rorp�parserrir4r�s r6�mainrws���� � $� $� &�F� ����x�'8�'8��'>�c�SV��W� � � �$� � '�D� ��������� � �6�4�;�;�+�+�V� 4�D���I� ��s �B�B&�__main__r�)NNNNrr�NF)rb)rbNNNN)ir[�types� collectionsrcr�r� _opcodes_allrrrrr r r � MethodType� FunctionType�CodeTyperg� staticmethodrTrLrArrrrrrrr"r#r$r%r&r'r(r)r*r+r,r-�listr�r�r�r�r�� startswith� _empty_slot�zip�spec_op� specializedrJr�r7r rr|r�r�r�r�r�r�r r�r� namedtupler�r��__doc__r�r�r�r�r�r�r�r�r�r�rrr�r�r�r�rrr�rrOrRrSr� _INT_BITSr7r rrrIrNrrwrU)�slotr5�base�familyr�s00000r6�r�s@��6� � �� �� � � � :�B�+c�#��b�$(�e�+c�ZD� �� � ��i�!�m�$� ��0�0  �6�, � E%�E%�P � �z���F���]V��  s�K)�"K)�K/