Current File : /home/mmdealscpanel/yummmdeals.com/cli.zip
PK}K�Z�t�``
cls/cgroup.sonuȯ��ELF> 	@ @8	@�� P
P
 P
 @H x
x
 x
 888$$���  S�td���  P�td���44Q�tdR�tdP
P
 P
 ��GNU�]��Z9�{�Vy��⃄��@ BE���|�qX� a�Uk r�f, �F"�� � �� __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizegetopt_longputsexitoptargnl_cli_cls_parse_ematchrtnl_cgroup_set_ematch__stack_chk_failnl_cli_tc_registernl_cli_tc_unregisterlibpthread.so.0libc.so.6_edata__bss_start_endcgroup.soGLIBC_2.4GLIBC_2.2.5�ii
ui	 P
 �	X
 0	`
 �	h
  	p
 p
  �
  �
` �
x 
� � � � � 
� � � � � � 	� 
� � 
��H��H�	 H��t��H����5� �%� ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a�������%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D��H�=5 ������H�=% �P���H�=I H�B H9�tH�~ H��t	�����H�= H�5 H)�H��H��H��?H�H�tH�U H��t��fD�����=� u+UH�=2 H��tH�=� �9����d����� ]������w������AVI��AUA��ATI��USH�� H��dH�%(H�D$1�H�l$I��H��H��L��D���D$�k������tF��et!��hu�H�=��0���1��y���f�H�Y L��H�0�>���L��H���C���떐H�D$dH3%(u
H��[]A\A]A^������H��H���he:helpematchcgroupUsage: nl-cls-add [...] cgroup [OPTIONS]...

OPTIONS
 -h, --help                Show this help text.
 -e, --ematch=EXPR         Ematch expression

EXAMPLE    nl-cls-add --dev=eth0 --parent=q_root cgroup;40���P���x`����p����@����zRx�$����FJw�?:*3$"DP����@\�����F�E�E �D(�A0�K@�
0A(A BBBA������p���GNU��	0	�	 	p
 ���
�
P
 `
 ���o`(�
,x ���P	���o���ox���o�oT���o	x
  0@P`p��
h�
e�

GA$3a1��
GA$3p1029 	�
GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realigncgroup.so-3.7.0-1.el8.x86_64.debug��L��7zXZ�ִF!t/��G
]?�E�h=��ڊ�2N�.�wGD���VPަ��U�]��ܷ�OgƬ�������&�U��2�DT���r>>�{p��\��r��2E(ܶ�B~�F��[j]�<��oyf��NA��$<h4����A��2�"$�|��j�D}ּ���g��q��9.-	;hЈR�ɐ�T��zs���5{d!C����g�&`�o��-$Jҝ���qoXc����6�f�]�b���~U�EYc�n��b���S�~<
�
_���BX��P"F`�8�хJ�p򷋌p=ie�������&�J��eJ�����[�4aq�j��+����T�\�>ZF_hRO�1B�!�;S$��n����^ߝ�!֯�)Z PM���U�A�%�j2�6��]B=bm���rR�~IQ�=U5��V"v��v��;��DC��Q&�d6$;�Hބ��ZDz�n�������9��m�%jd�Z�A��3r(gy�M�����J!D&��#:}���Z"�5[V_�R6�u6f�Q���M�����~�7a�ސ�!�K?������s�g�nk_N�̤(>Q9��2�0CT
�ƨƀfz�C��� �ѵ���z��l���|��r�~�h?�d8E9�%�:��>}�A�=����+Ji����I��|���cd�$
5Ӥ^���,᷻��&uw�W�AWas^ø/L�h�"*�9[�i�m��D������0^��<]�>	n��բ�1�P��6
�JRQ�7��|d�U)ϵ��bۃz,2��l��5
(f��sO�%��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``0(���0((,8���oTT"E���oxx0T��P^B���h��c���n���w 	 	�}�
�

�2�
�
����4������� �P
 P
�`
 `
�p
 p
�x
 x
�x x�� � �� ���`��
�(�L�(PK}K�Z���.�.cls/basic.sonuȯ��ELF>�
@P'@8	@�� 00 0 �� XX X 888$$���  S�td���  P�td���44Q�tdR�td00 0 ��GNU\�h�`/�w��  ����3�@ BE���|�qX�� ����U�a h��, F"5�  H�  <�  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizegetopt_longoptargnl_cli_cls_parse_ematchrtnl_basic_set_ematchrtnl_tc_str2handlertnl_basic_set_targetputsexitnl_geterrornl_cli_fatal__stack_chk_failnl_cli_tc_registernl_cli_tc_unregisterlibpthread.so.0libc.so.6_edata__bss_start_endbasic.soGLIBC_2.4GLIBC_2.2.5+ii
Vui	`0 �8 �
@ PH �
P P   �   
@  
�  
�  �� � 
� � � p x � � � � � � 	� � 
� � � ��H��H�� H��t��H����5J �%K ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!�������%u D���%m D���%e D���%] D���%U D���%M D���%E D���%= D���%5 D���%- D���%% D���% D���% D��H�=� ������H�=� ����H�=� H�� H9�tH�� H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�� H��t��fD�����=U u+UH�=� H��tH�=� �9����d����- ]������w������AWAVAUI��ATA��UH��SH��dH�%(H�D$1�H�\$I��DI��H�
 H��D��H���D$�T������tw��htZ��tt%��eu�H�� L��H�0�N���L��H���3���멐H�� L��H�8�>���A�Dž�xN�4$L�������f.�H�=����1�����DH�D$dH3%(u4H��[]A\A]A^A_É��b���H�59D��H��H�. H�1��T���������H��H���ht:e:Unable to parse target "%s":helptargetematchbasicUsage: nl-cls-add [...] basic [OPTIONS]...

OPTIONS
 -h, --help                Show this help text.
 -t, --target=ID           Target class to send matching packets to
 -e, --ematch=EXPR         Ematch expression

EXAMPLE    # Create a "catch-all" classifier, attached to "q_root", classyfing
    # all not yet classified packets to class "c_default"
    nl-cls-add --dev=eth0 --parent=q_root basic --target=c_default;4P���P0���x�����������zRx�$�����FJw�?:*3$"D�����H\H���!F�B�B �E(�D0�D8�DP�
8A0A(B BBBA�,�������GNU���
P�
P +M�
�0 @ ���o`��
lX 8�Ph	���o���o ���o�o����o
X  	0	@	P	`	p	�	�	�	�	�	�	�	�h
t
e
�GA$3a1��GA$3p1029�
�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignbasic.so-3.7.0-1.el8.x86_64.debug	���7zXZ�ִF!t/��G]?�E�h=��ڊ�2N���. ��Uf�G?*��5�z*��
Ns��N`�S�S���l�{;S�M��gtL�[a��k7��qE��p�!�_}������ͬ�DT��[
o�+݌�g�jKf�1}^@D�?a��,���W�_��)B�
{Zh�m�:¿l�݋�%ʯ�ך�I�eļ�3����n�Q/�$�S�r���S_c�w�"�q`�<�9�"���"P�c�G��ؿ(x�`s%��j�b��C�t{��-�m����r��k�����좖[��CYn�v<j�K���׍t��H���y�p���֓�
%r�kf�IB�+��qI�-�͝B�Q�({� .�A�$`W����Qu��kD
RT�~9f�������V��h}���a^>��9:���V~��1ay
v>��w�\DL��7�$��;�����p�)����	�Jn}?M
�v���S�#����]��z��eҋ�D[|
3�;�(�IK�Je	U�D�d�2��q�w�z��1gM���$�7S��vN_8"p",�P;���b���+aZ��|%���ƹ����B���~7�����`�쫨�n={�=�~20�A[թ�Zj��3�B�=	�?A�x�#=s�]���O#:v3w���}�CE$|��1LY����_-�,�L8�v���ս��\��\�)������j����2�-��6�v��j����s�=���K�ۍ�'ۀ����rb-P�-��
b���I,��м��ռ�N)I��F?נ��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``0(���0��l8���o��*E���o  0TPPh^B��8h��c		�n�	�	�w�
�
}��
�2������4������� �0 0�@ @�P P�X X�X X��   � ��  � �� `� �
�"(�"\(&(PK}K�Z>L(�h.h.qdisc/bfifo.sonuȯ��ELF> 	@('@8	@�
�
 PP P @H xx x 888$$h
h
h
  S�tdh
h
h
  P�td```44Q�tdR�tdPP P ��GNUx��
�d«�`wn�1X)}��@ BE���|�qX� ���Uta , �hF"��  �  ��  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizegetopt_longoptargnl_size2intrtnl_qdisc_fifo_set_limitputsnl_cli_fatal__stack_chk_failnl_cli_tc_registernl_cli_tc_unregisterlibpthread.so.0libc.so.6_edata__bss_start_endbfifo.soGLIBC_2.4GLIBC_2.2.5�ii
ui	P �	X 0	` �	h  	p p   �
   �
`  �
x  
� � � 	� 
� 
� � � � � � � � � 
��H��H�	 H��t��H����5� �%� ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a�������%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D��H�=5 �����H�=% �P���H�=I H�B H9�tH�~ H��t	�����H�= H�5 H)�H��H��H��?H�H�tH�U H��t��fD�����=� u+UH�=2 H��tH�=� �9����d����� ]������w������AWAVI��AUA��ATI��USH�� H��dH�%(H�D$1�H�l$I��H��H��L��D���D$�y������t@��ht/=u�L�=q I�?�����x@��L���[����f�H�=i����H�D$dH3%(u"H��[]A\A]A^A_�I���H�5a1����������H��H���hhelplimitbfifoUsage: nl-qdisc-add [...] bfifo [OPTIONS]...

OPTIONS
     --help                Show this help text.
     --limit=LIMIT         Maximum queue length in number of bytes.

EXAMPLE    # Attach bfifo with a 4KB bytes limit to eth1
    nl-qdisc-add --dev=eth1 --parent=root bfifo --limit=4096Unable to parse bfifo limit "%s": Invalid format.;4����P0���x��������������zRx�$8����FJw�?:*3$"D�����H\����F�B�E �E(�D0�A8�KP�
8A0A(B BBBA�������GNU��	0	�	 	p ���
�
P ` ���o`(�
*x ���P	���o���ox���o�oR���o	x  0@P`p��
h�
�

GA$3a1��
GA$3p1029 	�
GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignbfifo.so-3.7.0-1.el8.x86_64.debug��G�7zXZ�ִF!t/��O]?�E�h=��ڊ�2N�.�wGD���4�E����0��()H���1y��Q���'6��D���qY��5GT&H��IT����[.�	f&��$�����ɩ\�F�'�v�ff�:���+1P�p5����������b�qĴ�d-I�"λx�{|>M�i�ā4�s�xp>i�\��QM�C���)�]6����x��
��S���?��J���N4��V�X
E�
COT�gM��'��9
�U[��̗��T4%�mK�F��Yh	Tf�1��{��O��!��ͲRp���K�9���1F�J�*��Ա���u�>��kxã�z&=�F�xN�m���n$�5��ϲ{��?�I�le1i���F�Ǟ��uW��-[+� x��yL�`>��*�@߱���ㆾ*:�(�ƀN�@�)��]<�=�u����su�3�\]�J��<��k4�A�椢u�Z��i��p�ά��o��[L=b���XT���O��M8j�S{n&�loN���� ��o��X���%H\�,F.k�*m�J<\,�6��9P�X���	���B�jrzݶ���0"�2�ګ�|��9{�1`3����3�I\��.d������(�=���X����@u��ԯ��~��~U�}D��ï%��]��T�j[J�=��-W��s�c���>���}nq�@� ��%+��u5\5{��CKFK�v"��3��Ú�9��O�-哹L��f�MX+����H=�Gf/��X�+���+�d�kҥ����x�DZ�g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``0(���0((*8���oRR"E���oxx0T��P^B���h��c���n���w 	 	�}�
�

�2�
�
x�``4�����h
h
 �P P�` `�p p�x x�x x��   � ��  � �� `� �
�"(�"P�%(PK}K�Z���8080qdisc/htb.sonuȯ��ELF>@
@�(@8	@pp   �� 88 8 888$$PPP  S�tdPPP  P�td���<<Q�tdR�td  ��GNU*`k�+�$���ͽ��w��@ BE���|�qXK a���Uf� ��y�, ^1mF"��! ��! ��! __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizegetopt_longputsoptargnl_size2intrtnl_htb_set_cbufferrtnl_htb_set_ceilnl_cli_parse_u32rtnl_htb_set_priortnl_htb_set_rbufferrtnl_htb_set_quantumrtnl_htb_set_rate__stack_chk_failnl_cli_fatalrtnl_htb_set_defclsrtnl_htb_set_rate2quantumnl_cli_tc_registernl_cli_tc_unregisterlibpthread.so.0libc.so.6_edata__bss_start_endhtb.soGLIBC_2.4GLIBC_2.2.5�ii
�ui	� P p
  ( @
0 0   �   �@  ��  ��  ��  ��  �! � ! �@! ��! ��! `�! ��! �� � 
� � � P X ` h p x � � 	� � 
� � � � � � � ��H��H�� H��t��H����5* �%+ ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h��������% D���%
 D���% D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D��H��H�=1 ���H�=e H�����f.�f���H��H�=A ���H�=� H�����f.�f�H�=I H�B H9�tH� H��t	�����H�= H�5 H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=� H��tH�=� ����d����� ]������w������AWAVI��AUA��ATI��USH� H��dH�%(H�D$1�H�l$f�I��H��H��L��D���D$�������t/=��N=�+����hu�H�=��\���H�D$dH3%(�#H��[]A\A]A^A_�f�=��|c=�h���L�=� I�?����H���,��L������A����L�=y I�?���H������L���N�������f�H�I H�8���L����������f�L�=) I�?�a���H������L����������f�L�=� I�?�1���H��xO��L���������DL�=� I�?�	���H��x��L������u����P���I���H�541����I���H�5�1����I���H�5�1�����I���H�5+1�����I���H�5�1�������AVI��AUA��ATI��USH�T H��dH�%(H�D$1�H�l$I��H��H��L��D���D$������t=t_=t8��hu�H�=d�G���H�D$dH3%(uUH��[]A\A]A^�f.�H�� H�8�!���L�����W����w���f�H�� H�8����L��������W����
�����H��H���hhvhelpr2qdefaultratequantumceilpriocbursthtbUsage: nl-class-add [...] htb [OPTIONS]...

OPTIONS
     --help                Show this help text.
     --rate=RATE           Rate limit.
     --ceil=RATE           Rate limit while borrowing (default: equal to --rate).
     --prio=PRIO           Priority, lower is served first (default: 0).
     --quantum=SIZE        Amount of bytes to serve at once (default: rate/r2q).
     --burst=SIZE          Max charge size of rate burst buffer (default: auto).
     --cburst=SIZE         Max charge size of ceil rate burst buffer (default: auto)

EXAMPLE    # Attach class 1:1 to htb qdisc 1: and rate limit it to 20mbit
    nl-class-add --dev=eth1 --parent=1: --classid=1:1 htb --rate=20mbitUnable to parse htb rate "%s": Invalid format.Unable to parse htb ceil rate "%s": Invalid format.Unable to parse quantum "%s": Invalid format.Unable to parse burst "%s": Invalid format.Unable to parse cburst "%s": Invalid format.Usage: nl-qdisc-add [...] htb [OPTIONS]...

OPTIONS
     --help                Show this help text.
     --r2q=DIV             Rate to quantum divisor (default: 10)
     --default=ID          Default class for unclassified traffic.

EXAMPLE    # Create htb root qdisc 1: and direct unclassified traffic to class 1:10
    nl-qdisc-add --dev=eth1 --parent=root --handle=1: htb --default=10;< �X@����P���@����(p���������zRx�$�� FJw�?:*3$"D��H\���/F�B�E �E(�D0�A8�KP�
8A0A(B BBBJ@������F�E�E �D(�A0�K@m
0A(A BBBK�P���$HW���$HWGNU�Pp
@
0 s���

t   ���o`��
�8 �P	@	���o���o����o�o����o8  0@P`p�������� �h���h�������`��GA$3a1�
�GA$3p1029@
sGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY`sGA+GLIBCXX_ASSERTIONShtb.so-3.7.0-1.el8.x86_64.debug���9�7zXZ�ִF!t/��w6]?�E�h=��ڊ�2N� ����fi�̨V�����p�@F��T���V�O�����'��i �䓂�P#[��o��5�ݦԀ��j� Pg��L��������a6Y��f`H�rCFs�Lb����6R��l���>�Z�b�q��)��&����h�_����dQO}�O�h��b�*��g�e��s��Z�a4s��=�`�c���S�S���j��ݾX^_O0Na	1Wvdݾ�D�zo~���Dr�E�w�����еZ��3���p3�����C��^X1n��
>M�c�E�&�-U�������uݞk��h���T	pdw�ᬚ)�LRq�X$LU'�?��:��j1�8YD˓�R�Kֱ��5|J��?�$j�>��f�o� �U
�(��`��� t��[
��T��)D�)^~��F�[U3I#��Z.�ti^V@/!��g�qB~�hW��}�[s���׮��:�7�0�B�8HU�*^�?�a�7;���:��/O��bU� ��RY�\�ΈǠ�j��M����!���N$�
�,~�+�㹫�ߩ
2���JRg�M0���k�֘DZ=FI�A4�ƵE�Z�uܚX���2R'�ϗ��e\j4|ra�����}*�^��hf���<�l���?����A�U�h<u�3�;}�=M��ט�)a)��/`�:-ǩ�WGu+��ZX�]Z�?t�N��5g3�̷Vy���4jy���+��D����#Mi��rryX�w�Q�:B��Q�i-4O��8<�i�(&�2�v�+v���ft�u|�C,,�c>)��H���
E��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``0(��X0���8���o��2E���o��0T@^BP	P	�h�
�
c n00w@
@
3}tt
�2��h���<�00�PP � �   �0 0�8 8�8 8��   � ��! �!��!`�!D
4$$X$x�'(PK}K�Z��^�PPqdisc/blackhole.sonuȯ��ELF>�@@8	@88 p
p
 p
  �
�
 �
 888$$  S�td  P�td 
 
 
44Q�tdR�tdp
p
 p
 ��GNU +
�����~�ϫr�S��
�@ 
BE���|�qXw afU , �F"�p �x �p __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizegetopt_longputs__stack_chk_failnl_cli_tc_registernl_cli_tc_unregisterlibpthread.so.0libc.so.6_edata__bss_start_endblackhole.soGLIBC_2.4GLIBC_2.2.5�ii
�ui	�p
 �x
 ��
 @�
 ��
 �
  :	@ ?	X �� � � � 	� � � � � � 	��H��H�!	 H��t��H����5� �%� ��h�������h��������h�������h�������h�������h��������%U D���%M D���%E D���%= D���%5 D���%- D��H�=� ������H�=u ���H�=� H�� H9�tH�� H��t	�����H�=i H�5b H)�H��H��H��?H�H�tH�� H��t��fD�����=% u+UH�=� H��tH�=. �9����d����� ]������w������AUA��ATI��USH�Y H��dH�%(H�D$1�H�l$�fD��htCI��H��H�^L��D���D$������u�H�D$dH3%(uH��[]A\A]�H�=9�D������M�����H��H���hhelpblackholeUsage: nl-qdisc-add [...] blackhole [OPTIONS]...

OPTIONS
     --help                Show this help text.

EXAMPLE    # Drop all outgoing packets on eth1
    nl-qdisc-add --dev=eth1 --parent=root blackhole;4����P0���x����������p����zRx�$h���pFJw�?:*3$"D����`8\����F�E�D �A(�K@[
(A ABBD���������GNU���@��
 ����
$	p
 �
 ���o`��
�� �( 	���o���o����o�o����o�
 � 0@:	h?	�GA$3a1�1	GA$3p1029�#	GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignblackhole.so-3.7.0-1.el8.x86_64.debug�b(��7zXZ�ִF!t/��W]?�E�h=��ڊ�2N����^ ���P�I.�D6�_v��i
��O���@wJ�Bv������o�~�+�0`��67�:�P�i��+L!C��G)��2�|�Z�9z�����]�	������b��5Cy!�Ǽ�Jw�9i�a}��*%�\�m����]s�+�[�JJ�����TW�O��H���Mֆƾ���T<2
�>읠�/�0���'Ǚ�]��jɟ�r���֚���0d�[3�Xm�i�]�.š
?g>����(�݈�zч����7����C�޷��o�ohS9kμ��9��`�n�b��SP������[��OY�{�c�]S����|㜼�ͪ��"��{\��o!�|������[$q�Z�0;;�dVR�x,ߤ�#���m�+^Ѫ'�-�+��a-xŔ���\�Ϙho������л���b�iy���KxR������j{���I��\*���������f����@Γ%�����E���e���0�q<-�G,R�cΖ�h�>4��,B��nZ:T��;��i=(!�S��$�U��;6w�-�w#�!7@f�7�<�%�;�0�&�ReWj-�g�Y�!e�z�T�1��T�	��)�;Ft��&�/�ި�/�����w���ӣ�C$��]�'�07���F��DYn���Ѝ�\���Uln�e��n�խ�Zӵ�+Z�Ư��0?��Z�:)w��+S	5����:�zs�Y3Y�D�_2�1k}4�n���z������7)��aX���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``0(��80���8���o��E���o��0T ^B((�h��c��pnPP`w��s}$	$	
�28	8	�� 
 
4�X
X
�� �p
 p
��
 �
��
 �
��
 �
�� �h� p �p p�x`p�
d,�X�(PK}K�Z��PPqdisc/ingress.sonuȯ��ELF>�@@8	@ p
p
 p
  �
�
 �
 888$$�
�
�
  S�td�
�
�
  P�td


44Q�tdR�tdp
p
 p
 ��GNU�o�;1Yp^aS�W�_��
�@ 
BE���|�qXw afU , �F"�p �x �p __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizegetopt_longputs__stack_chk_failnl_cli_tc_registernl_cli_tc_unregisterlibpthread.so.0libc.so.6_edata__bss_start_endingress.soGLIBC_2.4GLIBC_2.2.5�ii
�ui	�p
 �x
 ��
 @�
 ��
 �
  :	@ ?	X �� � � � 	� � � � � � 	��H��H�!	 H��t��H����5� �%� ��h�������h��������h�������h�������h�������h��������%U D���%M D���%E D���%= D���%5 D���%- D��H�=� ������H�=u ���H�=� H�� H9�tH�� H��t	�����H�=i H�5b H)�H��H��H��?H�H�tH�� H��t��fD�����=% u+UH�=� H��tH�=. �9����d����� ]������w������AUA��ATI��USH�Y H��dH�%(H�D$1�H�l$�fD��htCI��H��H�^L��D���D$������u�H�D$dH3%(uH��[]A\A]�H�=1�D������M�����H��H���hhelpingressUsage: nl-qdisc-add [...] ingress

OPTIONS
     --help                Show this help text.

EXAMPLE    # Attach ingress to eth1
    nl-qdisc-add --dev=eth1 --parent=root ingress;4��PP���x���������������zRx�$����pFJw�?:*3$"D���`8\�����F�E�D �A(�K@[
(A ABBD�������GNU���@��
 ����
$	p
 �
 ���o`��
�� �( 	���o���o����o�o����o�
 � 0@:	h?	�GA$3a1�1	GA$3p1029�#	GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realigningress.so-3.7.0-1.el8.x86_64.debug���9�7zXZ�ִF!t/��O]?�E�h=��ڊ�2N����^ ���d��:D6�_v��i
��S�ƪ��O:qGU#!��`ő��.�ajw���R�5AF��?3U&�W��x��n�3�ILJ���!�H���@��u�~L��#�-���tXM�v�tr��6ɿ���f�
0%d���i-L�� �3�Nָ[2�N01�ԯv��o*G9�
t�c^
L��
�n�w#�x�,�!	v�`��XJ���g�wa���J4�!T��[��"��ߪ�? W	1�N���yG�G^�V�U��G���4��C�⠗��8�`q�P���'���$�afD �e�����yx~���2QQS[�Ic�`{ns��7,x$�.�YH
�XN���7mpG���%�ae�Z��3t*���fD���$��i�]��FFa����G��YC��PV�P"qP�>V����	��n��V?c��{R�9��8n�!��xZ�~�׶[��E$s���
�!7w��L�ւ0��υ{*1Uaȕ�e8m=��P4Bb;��j�?�����N���I�`�%|�=~e*\�T�K����zQ��=�p{��G�̮<s��V�ێƁ:�� ~�a�=q3�Z)�ue�MZ��:"��2˅Kq@��6N,;����~�o~a���2�f���wfr���\����1ݑ;�j)w�C�K�ƶ�Þ1�+��YcY"59��\��|Y��Y�6�"`�����0`��*���纚�'�����c/r��
��'�#�8�U�y%V�.��4kH2u�� 뮱�g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``0(��80���8���o��E���o��0T ^B((�h��c��pnPP`w��s}$	$	
�28	8	��

4�8
8
���
�
 �p
 p
��
 �
��
 �
��
 �
�� �h� p �p p�x`p�
d(�X�(PK}K�Z��_�//qdisc/fq_codel.sonuȯ��ELF>�
@�'@8	@�� 88 8 �� `` ` 888$$���  S�td���  P�td���44Q�tdR�td88 8 ��GNU+p2�d���a�2E
��r�Z�@ BE���|�qX�+ ��h�U�a y, >F"m! �! t! __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizegetopt_longoptargnl_cli_parse_u32rtnl_qdisc_fq_codel_set_targetrtnl_qdisc_fq_codel_set_limitputsrtnl_qdisc_fq_codel_set_flowsrtnl_qdisc_fq_codel_set_intervalrtnl_qdisc_fq_codel_set_quantum__stack_chk_failnl_cli_tc_registernl_cli_tc_unregisterlibpthread.so.0libc.so.6_edata__bss_start_endfq_codel.soGLIBC_2.4GLIBC_2.2.5cii
�ui	�8 �@ H �P �
X X   J
   O
@  U
`  ]
�  c
�  l
�  s
�  �� � � � � x � � � � � � � 	� 
� 
� � ��H��H�� H��t��H����5 �% ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1�������%= D���%5 D���%- D���%% D���% D���% D���%
 D���% D���%� D���%� D���%� D���%� D��H�=� ������H�=� �0���H�=� H�� H9�tH�� H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=b H��tH�=� �9����d����] ]������w������AVI��AUA��ATI��USH� H��dH�%(H�D$1�H�l$I��H��H�3L��D���D$�x������t=��~6=����=u�H�� H�8����L�����U������ht+=u�H�] H�8���L���������n���fDH�=����H�D$dH3%(urH��[]A\A]A^��H�	 H�8���L�����g�������f�H�� H�8�q���L�����w������f�H�� H�8�Q���L�������������]�����H��H���hhelplimitquantumflowsintervaltargetfq_codelUsage: nl-qdisc-add [...] fq_codel [OPTIONS]...

OPTIONS
     --help                Show this help text.
     --limit=LIMIT         Maximum queue length in number of bytes.
     --quantum=SIZE        Amount of bytes to serve at once.
     --flows=N             Number of flows.
     --interval=N          The interval in usec.
     --target=N            The minimum delay in usec.

EXAMPLE    # Attach fq_codel with a 4096 packets limit to eth1
    nl-qdisc-add --dev=eth1 --parent=root fq_codel --limit=4096;4��P����xp���������P����zRx�$�����FJw�?:*3$"D0����@\����cF�E�E �D(�A0�K@�
0A(A BBBH����������GNU����
X Sc�@	
4
8 H ���o`p�
�`   p�	���o���o@���o�o���o
` p	�	�	�	�	�	�	�	�	

 
J
hO
U
]
c
l
s
�GA$3a1@	A
GA$3p1029�
3
GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignfq_codel.so-3.7.0-1.el8.x86_64.debug��7zXZ�ִF!t/��W!]?�E�h=��ڊ�2N�	����dP�t�4�iZ��\yR+�*b=2%JHN����6�:����XB�ÊW�j��0G
�&!�/�Vٞ\qg�Q3x,��43�qx䵦ȏcǨ���G�S�7(�W����~fj�2(��s��ѫ
׾\�Jk5�����_����E��BM�j��jv�K�)!y�u�7�v���r���������
!v�����Yk��|�1�F�>�-�-O����‘�}�.j3��"��ך5��˫���b)�g��:�n��1�ĕM -��>z��ffd�+�}�m�N����zD/��|�XqG�����$�+9���~��N��Դ���s���郴%nA�WL�;��!���/�Z���}�;��I�Bg�O����a�
VSB�
���\cL��,xq�y���z3xm�5�x�+��s� 3H��Vy[)�`.wd�������E����È�3����w���U�}�6�I�/��Cu����<c��o�,i�#��tx-moy�>K�uP��u+'��H_@#	��U:��~V�2� � �/��@��!��'���׳B�`��O�7Vk"���,�'�0Ž��?mB$/*y���ZЦ��F��!�NUY���_��,/l.�b����W����������&��#6�T%���jza.Td�}�a[WP�\�AR���7!���ķ����.���S�,bF�|�i��sǺ'|}��yC'B-=�85H���%EA�<�<)�w|������;Fv��������g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``0(���0pp�8���o(E���o@@0Tpp�^B   h@	@	c`	`	�n0
0
�w�
�
C}4
4

�2H
H
8���4������� �8 8�H H�X X�` `�` `��    �! !�!`!�
#,0#d�&(PK}K�Z5�ۃ�/�/
qdisc/hfsc.sonuȯ��ELF>�@�(@8	@��   �� 88 8 888$$���  S�td���  P�td���DDQ�tdR�td  ��GNUG�K� �B�S%�{�����@ BE���|�qXr! ���w�c��� j, �4UF"\c�! v�! j�! __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizestrdupstrstrstrchrstrtoulfree__stack_chk_failgetopt_longoptargrtnl_class_hfsc_set_rscrtnl_class_hfsc_set_uscrtnl_class_hfsc_set_fscputsnl_cli_fatalnl_cli_parse_u32rtnl_qdisc_hfsc_set_defclsnl_cli_tc_registernl_cli_tc_unregisterlibpthread.so.0libc.so.6_edata__bss_start_endhfsc.soGLIBC_2.4GLIBC_2.2.5Yii
�ui	� �
 
  �
( �0 0   j   o`  j�  w�  z�  ��  } ! �8! �`! �x! �� � � � � P X ` h p x � � 	� 
� � 
� � � � � � ��H��H�a H��t��H����5� �%� ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h��������%� D���%} D���%u D���%m D���%e D���%] D���%U D���%M D���%E D���%= D���%5 D���%- D���%% D���% D���% D���%
 D���% D��H��H�=A ���H�=u H�����f.�f���H��H�=Q ���H�= H�����f.�f�H�=Y H�R H9�tH�� H��t	�����H�=) H�5" H)�H��H��H��?H�H�tH�e H��t��fD�����=� u+UH�=B H��tH�=n ����d����� ]������w����AWAVAUATI��USH��dH�%(H�D$1����H���pH�5"H��H�����H���&�xL�p�8�,L�����H��H����H��
L�����A��L94$��H��H�5�H���,���H�����xL�x���,L�����H��H�����H��
L�����A��L9<$��H��H�5`H������H�����xH�XtvH��
H���V���I��H9$t]H�����E�,$1�E�t$E�|$H�L$dH3%(uKH��[]A\A]A^A_�fDH��E1�����DE1��p����H���8������문�����D��AWAVA��AUI��ATA���U1�SH��8H�|$L�|$H�\$dH�%(H�D$(1��M��H�
v L��D��H�\�D$�,�������3=��F��h��=u�H�� H��H�8���A�ą��H�|$H�ރ��	�����=��=�j���H�c H��H�8�h���A�ą���H�|$H�ރ�����8����H�) H��H�8�.���A�ą���H�|$H�ރ�������fDH�=����H�D$(dH3%(uoH��8[]A\A]A^A_�DH�� H��H�8����A�ą�x'H�|$H���"���덅�u�H�5
D��1����H�� H�5D��H�1��m���������AVI��AUA��ATI��USH�d H��dH�%(H�D$1�H�l$I��H��H��L��D���D$�[������t:��ht)=u�H��
 H�8����L����������H�=�����H�D$dH3%(u
H��[]A\A]A^������H��H���m1:d:m2:hInvalid argumentshvhelpdefaultrtlsulhfscUsage: nl-class-add [...] hfsc [OPTIONS]...

OPTIONS
     --help                Show this help text.
     --ls=SC               Link-sharing service curve
     --rt=SC               Real-time service curve
     --sc=SC               Specifiy both of the above
     --ul=SC               Upper limit
     where SC := [ [ m1 bits ] d usec ] m2 bits

EXAMPLE    # Attach class 1:1 to hfsc qdisc 1: and use rt and ls curve
    nl-class-add --dev=eth1 --parent=1: --classid=1:1 hfsc --sc=m1:250,d:8,m2:100Unable to parse sc "%s": Invalid format.Usage: nl-qdisc-add [...] hfsc [OPTIONS]...

OPTIONS
     --help                Show this help text.
     --default=ID          Default class for unclassified traffic.

EXAMPLE    # Create hfsc root qdisc 1: and direct unclassified traffic to class 1:10
    nl-qdisc-add --dev=eth1 --parent=root --handle=1: hfsc --default=10;D��`�����������|��������������8zRx�$@� FJw�?:*3$"D8���H\P����B�B�B �B(�D0�A8�DPN
8A0A(B BBBGH������F�B�E �E(�G0�C8�DpH
8A0A(B BBBF@�H����F�E�E �D(�A0�K@�
0A(A BBBA8����$HWP<���$HWGNU��

�
�0 IY{x

8   ���o`��
�8 ����	���o���o����o�o����o8 �
�
�
�
�
 0@P`p����jhojhwz�}����GA$3a1x
EGA$3p1029�6GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�
6GA+GLIBCXX_ASSERTIONShfsc.so-3.7.0-1.el8.x86_64.debug����7zXZ�ִF!t/���@]?�E�h=��ڊ�2N�`ca �����'�'�	��A�A"�X��:���0�]x���N|��|
�F�=#�n�2GYbx�`�h�&E8�{_����^�L�X�O��Y��<B@F=�)ŵ��(�l��@I�k�J�V��*˫իW!�{mWh��G0�5���]һ�ۣ�U:j�D�V}�6Y��؄S]~����lF�k/�6A[�*Hrv��rq��Q�̦��,�N�ɟ]E�����~h5
<'�g,)t��$��ly�̝���\x2zl��y��Q/��P�@��IAt�6����򿣔��Ƭ��m�3�?�M��VT��<X?�N��J��H��V�^�$�$�q�NGQ���w'��c�dU�Yqu@���'Rc	��N�������r�
��*��X�u��h�t��t$RnC����ʁ{d	X��ຄ�p�r1�4۲$�wI�nJ���c	�R���$š�/�[���'eǦ
D|4�ʢ�|���D�]�?F9ݎ}5s�q�Z{�0���S��;o�t�
�G�3�c�=񏐈��ʕ�D5ݚ�x�S�Y�x�:�eQG,q�nS�R�ٌ���8;Ty2梲�������v���&�J�oJZgsǀ��UǶ��7~���
�c5�ֆ�Q9�h@w��YP,!�	�>7�E���gý
�������<���Y.<kK���ի)ԝ�!�`��� �	��5�������Z�Y��1/�uVAf�Q�s��@u${r�"�g�l�]t=<�n�)L4�Sa�7
�a��!�>�ߢuc��6�B�z#c�m��A�$*{ld
D8H�tEIYT����H�����|p��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``0(��X0���8���o��2E���o��0T���^B���hx
x
c�
�
 n��w��f}88
�2HH����D�@@h��� � �   �0 0�8 8�8 8��   � ��! �!��!`�!D
�#(�#�|'(PK}K�Z��תppqdisc/pfifo.sonuȯ��ELF>�@0@8	@�� X
X
 X
 8@ �
�
 �
 888$$���  S�td���  P�td���44Q�tdR�tdX
X
 X
 ��GNU�����났�+@~
�����
�@ 
BE���|�qX� �h�Uya , �F"�� �� �� __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizegetopt_longoptargnl_cli_parse_u32rtnl_qdisc_fifo_set_limitputs__stack_chk_failnl_cli_tc_registernl_cli_tc_unregisterlibpthread.so.0libc.so.6_edata__bss_start_endpfifo.soGLIBC_2.4GLIBC_2.2.5�ii
ui	X
 �	`
 �h
 `	p
 �x
 x
  z
  
` �
x �	� � � 	� 
� � � � � � � � � ��H��H�A H��t��H����5� �%� ��h�������h��������h�������h�������h�������h�������h�������h��q�������%= D���%5 D���%- D���%% D���% D���% D���%
 D���% D��H�=� ������H�=u �`���H�=� H�� H9�tH�� H��t	�����H�=i H�5b H)�H��H��H��?H�H�tH�� H��t��fD�����=% u+UH�=� H��tH�=� �9����d����� ]������w������AVI��AUA��ATI��USH�4 H��dH�%(H�D$1�H�l$I��H��H��L��D���D$������t:��ht)=u�H�� H�8�K���L�����q�����H�=Q����H�D$dH3%(u
H��[]A\A]A^�������H��H���hhelplimitpfifoUsage: nl-qdisc-add [...] pfifo [OPTIONS]...

OPTIONS
     --help                Show this help text.
     --limit=LIMIT         Maximum queue length in number of packets.

EXAMPLE    # Attach pfifo with a 32 packet limit to eth1
    nl-qdisc-add --dev=eth1 --parent=root pfifo --limit=32;4���P����x����(���������zRx�$�����FJw�?:*3$"D����@\`����F�E�E �D(�A0�K@�
0A(A BBBA�L����(���GNU��	�`	�x
 ���
h
X
 h
 ���o`�
"� ���P	���o���oX���o�o2���o	�
 ��� 0@z
h
�
�	GA$3a1�u
GA$3p1029�f
GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignpfifo.so-3.7.0-1.el8.x86_64.debugz@��7zXZ�ִF!t/��O]?�E�h=��ڊ�2N�`W�N ��^)U)�v3*f�ʹ��Ƃ?�(
Ny���V����%0z֒<4�x2O6k\X�p���=T+%����0�9Ge�f����f�aڶ�^��{g��
���:jP»m�J�������6{�
2���m}���Q:YՋ��E�A�~t53dstbo�3��C7qg�0��)!��-F����2�o��!�Rm}�2vu��K��Ij \J�K������4Gv��,��*�%<������t�J+h�{w�-֧��x�.�?|齲����I�D?Y�?m?�,��ŗ�H?�M���6�e��qU��~�>��l68M�
�,m0����Y�d�؉���Pjk:A�0�yϗ��Z\$��O��#m����h��Q��������l�hpi0z�M#%�
��~�AD�'��w�I2�o�!�0u\�";4��V֮�ܻ9���K"�X���-�Aht��֣5��>m9���7Q�z��_���mY]+�}�I���
������t�9f��M=$�����C47�L"_s8�Q\��#��������Ƶ���:�y?���=;�z�E:3lp�AC�]����ҰD�V�E�&�_ j�e��2�C�Cab�0�Z����r��P!�%#����Đ۲m
@p�aІ��W�#�fB_K�����j��]�9�T�x�����Ё<b�N�����z�%0Xo�<�մo@�U�,t3�C{��,�xa� L���䏸:>j�E�o�:(X�Q�u�Rp���*�:�����p(��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``0(���0"8���o22 E���oXX0T��P^B���h��c���nPP�w���}h
h

�2x
x
@���4������� �X
 X
�h
 h
�x
 x
��
 �
�� ��� � �� ���`��
�(�X(PK}K�Z h)�.�.
qdisc/plug.sonuȯ��ELF>`
@�'@8	@pp @@ @ �� hh h 888$$PPP  S�tdPPP  P�tdPPP44Q�tdR�td@@ @ ��GNU�p�%'l�
��}f���@ BE���|�qX� �h���Ua �, yF"A�  T�  H�  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizegetopt_longoptargnl_cli_parse_u32rtnl_qdisc_plug_set_limitrtnl_qdisc_plug_release_indefiniteputsrtnl_qdisc_plug_bufferrtnl_qdisc_plug_release_one__stack_chk_failnl_cli_tc_registernl_cli_tc_unregisterlibpthread.so.0libc.so.6_edata__bss_start_endplug.soGLIBC_2.4GLIBC_2.2.57ii
aui	k@ 0H p
P �
X `
` `   Z   _@  e`  l�  x�  ��  @� � 	� 
� � � � � � � � � � � 
� � ��H��H� H��t��H����5z �%{ ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A�������%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%} D���%u D��H�=U �����H�=E �0���H�=i H�b H9�tH�> H��t	�����H�=9 H�52 H)�H��H��H��?H�H�tH� H��t��fD�����=� u+UH�=� H��tH�=N �9����d����� ]������w������AVI��AUA��ATI��USH�� H��dH�%(H�D$1�H�l$I��H��H��L��D���D$�x������t_=t|*��htE=u�H�' H�8����L�����u����=tY=u�L��������H�=�����H�D$dH3%(u1H��[]A\A]A^��L������K���L������;��������H��H���hhelplimitbufferrelease-onerelease-indefiniteplugUsage: nl-qdisc-add [...] plug [OPTIONS]...

OPTIONS
     --help                Show this help text.
     --limit               Maximum queue length in bytes.
     --buffer              create a new buffer(plug) and queue incoming traffic into it.
     --release-one         release traffic from previous buffer.
     --release-indefinite  stop buffering and release all (buffered and new) packets.

EXAMPLE    # Attach plug qdisc with 32KB queue size to ifb0
    nl-qdisc-add --dev=ifb0 --parent=root plug --limit=32768
    # Plug network traffic arriving at ifb0
    nl-qdisc-add --dev=ifb0 --parent=root --update plug --buffer
    # Unplug traffic arriving at ifb0 indefinitely
    nl-qdisc-add --dev=ifb0 --parent=root --update plug --release-indefinite

    # If operating in output buffering mode:
    # at time t=t0, create a new output buffer b0 to hold network output
    nl-qdisc-add --dev=ifb0 --parent=root --update plug --buffer

    # at time t=t1, take a checkpoint c0, create a new output buffer b1
    nl-qdisc-add --dev=ifb0 --parent=root --update plug --buffer
    # at time t=t1+r, after c0 is committed, release b0
    nl-qdisc-add --dev=ifb0 --parent=root --update plug --release-one

    # at time t=t2, take a checkpoint c1, create a new output buffer b2
    nl-qdisc-add --dev=ifb0 --parent=root --update plug --buffer
    # at time t=t2+r, after c1 is committed, release b1
    nl-qdisc-add --dev=ifb0 --parent=root --update plug --release-one;4����P`���x���� ������zRx�$H����FJw�?:*3$"D���@\X���F�E�E �D(�A0�K@�
0A(A BBBH�D���� ���GNU�0p
�
`
` '7Y�
D@ P ���o`X�
wh �(�	���o���o����o�o����oh 		 	0	@	P	`	p	�	�	�	Zh_elx�@GA$3a1�QGA$3p1029`
BGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignplug.so-3.7.0-1.el8.x86_64.debug9��E�7zXZ�ִF!t/��G]?�E�h=��ڊ�2N��J��N����A� �t���'_�ia��r�T�}��Yg��Xd��y�N��
�2Gӂ�)؎X���6�p��di��C�D�s�~!��.I^�I����$�8pX���2�
�:Q�l 7�n`�F�D�j�,�[��ka�Ӫ�J&�v� ~���}g�1*#~�ڝ>��^���b����@!��ק���e�G�w�����HcĥA6��-O�G��52w5uq0��>��$��>[IG{������&�+�?DjK�$��Mdk�<l��x{�H�(m��;�q���U���[W��ԍ�"�v�օd�Pj'>����k�Q*˨oA�w�n��:��J�a��ix�m�o���Y\I��-�ODD�xة�O����s��YW�p֧��5"ZJ�B���+X�z+[�m�jc�����V􄹓5�]Z�c�I/̪�c2�y�V�3���*R�O�zt���EI���I�ؔsr`��Қ�$-�3��.��5H�c����152��8a॓�q2b=-�4�B��oBV�Vsi�
�]�A�@z��{E_�;�7�i����mj@G�ZU�\]���cO+�CH<RBI�k����"�U����H�Gu�yN�@�5W����5�i��C�+�x	�l	����,�;���^rօ�NX��6����b�,�K��Y�ҢG�����%���
����H��4�Ou���l�惒���i��bY����cڗ2T�~t��<|���U�����+�l�3‰‚qK��P}F;��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``0(���0XXw8���o��&E���o��0T((�^B��h��c���n�	�	�w`
`
�}DD
�2XX��PP4�����PP �@ @�P P�` `�h h�h h��   � ��  � �� `� �
�"(#Xd&(PK��[*�autocompletion.pynu�[���"""Logic that powers autocompletion installed by ``pip completion``.
"""

# The following comment should be removed at some point in the future.
# mypy: disallow-untyped-defs=False

import optparse
import os
import sys

from pip._internal.cli.main_parser import create_main_parser
from pip._internal.commands import commands_dict, create_command
from pip._internal.utils.misc import get_installed_distributions


def autocomplete():
    """Entry Point for completion of main and subcommand options.
    """
    # Don't complete if user hasn't sourced bash_completion file.
    if 'PIP_AUTO_COMPLETE' not in os.environ:
        return
    cwords = os.environ['COMP_WORDS'].split()[1:]
    cword = int(os.environ['COMP_CWORD'])
    try:
        current = cwords[cword - 1]
    except IndexError:
        current = ''

    subcommands = list(commands_dict)
    options = []
    # subcommand
    try:
        subcommand_name = [w for w in cwords if w in subcommands][0]
    except IndexError:
        subcommand_name = None

    parser = create_main_parser()
    # subcommand options
    if subcommand_name:
        # special case: 'help' subcommand has no options
        if subcommand_name == 'help':
            sys.exit(1)
        # special case: list locally installed dists for show and uninstall
        should_list_installed = (
            subcommand_name in ['show', 'uninstall'] and
            not current.startswith('-')
        )
        if should_list_installed:
            installed = []
            lc = current.lower()
            for dist in get_installed_distributions(local_only=True):
                if dist.key.startswith(lc) and dist.key not in cwords[1:]:
                    installed.append(dist.key)
            # if there are no dists installed, fall back to option completion
            if installed:
                for dist in installed:
                    print(dist)
                sys.exit(1)

        subcommand = create_command(subcommand_name)

        for opt in subcommand.parser.option_list_all:
            if opt.help != optparse.SUPPRESS_HELP:
                for opt_str in opt._long_opts + opt._short_opts:
                    options.append((opt_str, opt.nargs))

        # filter out previously specified options from available options
        prev_opts = [x.split('=')[0] for x in cwords[1:cword - 1]]
        options = [(x, v) for (x, v) in options if x not in prev_opts]
        # filter options by current input
        options = [(k, v) for k, v in options if k.startswith(current)]
        # get completion type given cwords and available subcommand options
        completion_type = get_path_completion_type(
            cwords, cword, subcommand.parser.option_list_all,
        )
        # get completion files and directories if ``completion_type`` is
        # ``<file>``, ``<dir>`` or ``<path>``
        if completion_type:
            options = auto_complete_paths(current, completion_type)
            options = ((opt, 0) for opt in options)
        for option in options:
            opt_label = option[0]
            # append '=' to options which require args
            if option[1] and option[0][:2] == "--":
                opt_label += '='
            print(opt_label)
    else:
        # show main parser options only when necessary

        opts = [i.option_list for i in parser.option_groups]
        opts.append(parser.option_list)
        opts = (o for it in opts for o in it)
        if current.startswith('-'):
            for opt in opts:
                if opt.help != optparse.SUPPRESS_HELP:
                    subcommands += opt._long_opts + opt._short_opts
        else:
            # get completion type given cwords and all available options
            completion_type = get_path_completion_type(cwords, cword, opts)
            if completion_type:
                subcommands = auto_complete_paths(current, completion_type)

        print(' '.join([x for x in subcommands if x.startswith(current)]))
    sys.exit(1)


def get_path_completion_type(cwords, cword, opts):
    """Get the type of path completion (``file``, ``dir``, ``path`` or None)

    :param cwords: same as the environmental variable ``COMP_WORDS``
    :param cword: same as the environmental variable ``COMP_CWORD``
    :param opts: The available options to check
    :return: path completion type (``file``, ``dir``, ``path`` or None)
    """
    if cword < 2 or not cwords[cword - 2].startswith('-'):
        return
    for opt in opts:
        if opt.help == optparse.SUPPRESS_HELP:
            continue
        for o in str(opt).split('/'):
            if cwords[cword - 2].split('=')[0] == o:
                if not opt.metavar or any(
                        x in ('path', 'file', 'dir')
                        for x in opt.metavar.split('/')):
                    return opt.metavar


def auto_complete_paths(current, completion_type):
    """If ``completion_type`` is ``file`` or ``path``, list all regular files
    and directories starting with ``current``; otherwise only list directories
    starting with ``current``.

    :param current: The word to be completed
    :param completion_type: path completion type(`file`, `path` or `dir`)i
    :return: A generator of regular files and/or directories
    """
    directory, filename = os.path.split(current)
    current_path = os.path.abspath(directory)
    # Don't complete paths if they can't be accessed
    if not os.access(current_path, os.R_OK):
        return
    filename = os.path.normcase(filename)
    # list all files that start with ``filename``
    file_list = (x for x in os.listdir(current_path)
                 if os.path.normcase(x).startswith(filename))
    for f in file_list:
        opt = os.path.join(current_path, f)
        comp_file = os.path.normcase(os.path.join(directory, f))
        # complete regular files when there is not ``<dir>`` after option
        # complete directories when there is ``<file>``, ``<path>`` or
        # ``<dir>``after option
        if completion_type != 'dir' and os.path.isfile(opt):
            yield comp_file
        elif os.path.isdir(opt):
            yield os.path.join(comp_file, '')
PK��[��2__init__.pynu�[���
PK��[l2�n�h�h
cmdoptions.pynu�[���"""
shared options and groups

The principle here is to define options once, but *not* instantiate them
globally. One reason being that options with action='append' can carry state
between parses. pip parses general options twice internally, and shouldn't
pass on state. To be consistent, all options will follow this design.
"""

# The following comment should be removed at some point in the future.
# mypy: strict-optional=False
# mypy: disallow-untyped-defs=False

from __future__ import absolute_import

import logging
import textwrap
import warnings
from distutils.util import strtobool
from functools import partial
from optparse import SUPPRESS_HELP, Option, OptionGroup
from textwrap import dedent

from pip._internal.exceptions import CommandError
from pip._internal.locations import USER_CACHE_DIR, get_src_prefix
from pip._internal.models.format_control import FormatControl
from pip._internal.models.index import PyPI
from pip._internal.models.target_python import TargetPython
from pip._internal.utils.hashes import STRONG_HASHES
from pip._internal.utils.typing import MYPY_CHECK_RUNNING
from pip._internal.utils.ui import BAR_TYPES

if MYPY_CHECK_RUNNING:
    from typing import Any, Callable, Dict, Optional, Tuple
    from optparse import OptionParser, Values
    from pip._internal.cli.parser import ConfigOptionParser

logger = logging.getLogger(__name__)


def raise_option_error(parser, option, msg):
    """
    Raise an option parsing error using parser.error().

    Args:
      parser: an OptionParser instance.
      option: an Option instance.
      msg: the error text.
    """
    msg = '{} error: {}'.format(option, msg)
    msg = textwrap.fill(' '.join(msg.split()))
    parser.error(msg)


def make_option_group(group, parser):
    # type: (Dict[str, Any], ConfigOptionParser) -> OptionGroup
    """
    Return an OptionGroup object
    group  -- assumed to be dict with 'name' and 'options' keys
    parser -- an optparse Parser
    """
    option_group = OptionGroup(parser, group['name'])
    for option in group['options']:
        option_group.add_option(option())
    return option_group


def check_install_build_global(options, check_options=None):
    # type: (Values, Optional[Values]) -> None
    """Disable wheels if per-setup.py call options are set.

    :param options: The OptionParser options to update.
    :param check_options: The options to check, if not supplied defaults to
        options.
    """
    if check_options is None:
        check_options = options

    def getname(n):
        return getattr(check_options, n, None)
    names = ["build_options", "global_options", "install_options"]
    if any(map(getname, names)):
        control = options.format_control
        control.disallow_binaries()
        warnings.warn(
            'Disabling all use of wheels due to the use of --build-options '
            '/ --global-options / --install-options.', stacklevel=2,
        )


def check_dist_restriction(options, check_target=False):
    # type: (Values, bool) -> None
    """Function for determining if custom platform options are allowed.

    :param options: The OptionParser options.
    :param check_target: Whether or not to check if --target is being used.
    """
    dist_restriction_set = any([
        options.python_version,
        options.platform,
        options.abi,
        options.implementation,
    ])

    binary_only = FormatControl(set(), {':all:'})
    sdist_dependencies_allowed = (
        options.format_control != binary_only and
        not options.ignore_dependencies
    )

    # Installations or downloads using dist restrictions must not combine
    # source distributions and dist-specific wheels, as they are not
    # guaranteed to be locally compatible.
    if dist_restriction_set and sdist_dependencies_allowed:
        raise CommandError(
            "When restricting platform and interpreter constraints using "
            "--python-version, --platform, --abi, or --implementation, "
            "either --no-deps must be set, or --only-binary=:all: must be "
            "set and --no-binary must not be set (or must be set to "
            ":none:)."
        )

    if check_target:
        if dist_restriction_set and not options.target_dir:
            raise CommandError(
                "Can not use any platform or abi specific options unless "
                "installing via '--target'"
            )


###########
# options #
###########

help_ = partial(
    Option,
    '-h', '--help',
    dest='help',
    action='help',
    help='Show help.',
)  # type: Callable[..., Option]

isolated_mode = partial(
    Option,
    "--isolated",
    dest="isolated_mode",
    action="store_true",
    default=False,
    help=(
        "Run pip in an isolated mode, ignoring environment variables and user "
        "configuration."
    ),
)  # type: Callable[..., Option]

require_virtualenv = partial(
    Option,
    # Run only if inside a virtualenv, bail if not.
    '--require-virtualenv', '--require-venv',
    dest='require_venv',
    action='store_true',
    default=False,
    help=SUPPRESS_HELP
)  # type: Callable[..., Option]

verbose = partial(
    Option,
    '-v', '--verbose',
    dest='verbose',
    action='count',
    default=0,
    help='Give more output. Option is additive, and can be used up to 3 times.'
)  # type: Callable[..., Option]

no_color = partial(
    Option,
    '--no-color',
    dest='no_color',
    action='store_true',
    default=False,
    help="Suppress colored output",
)  # type: Callable[..., Option]

version = partial(
    Option,
    '-V', '--version',
    dest='version',
    action='store_true',
    help='Show version and exit.',
)  # type: Callable[..., Option]

quiet = partial(
    Option,
    '-q', '--quiet',
    dest='quiet',
    action='count',
    default=0,
    help=(
        'Give less output. Option is additive, and can be used up to 3'
        ' times (corresponding to WARNING, ERROR, and CRITICAL logging'
        ' levels).'
    ),
)  # type: Callable[..., Option]

progress_bar = partial(
    Option,
    '--progress-bar',
    dest='progress_bar',
    type='choice',
    choices=list(BAR_TYPES.keys()),
    default='on',
    help=(
        'Specify type of progress to be displayed [' +
        '|'.join(BAR_TYPES.keys()) + '] (default: %default)'
    ),
)  # type: Callable[..., Option]

log = partial(
    Option,
    "--log", "--log-file", "--local-log",
    dest="log",
    metavar="path",
    help="Path to a verbose appending log."
)  # type: Callable[..., Option]

no_input = partial(
    Option,
    # Don't ask for input
    '--no-input',
    dest='no_input',
    action='store_true',
    default=False,
    help=SUPPRESS_HELP
)  # type: Callable[..., Option]

proxy = partial(
    Option,
    '--proxy',
    dest='proxy',
    type='str',
    default='',
    help="Specify a proxy in the form [user:passwd@]proxy.server:port."
)  # type: Callable[..., Option]

retries = partial(
    Option,
    '--retries',
    dest='retries',
    type='int',
    default=5,
    help="Maximum number of retries each connection should attempt "
         "(default %default times).",
)  # type: Callable[..., Option]

timeout = partial(
    Option,
    '--timeout', '--default-timeout',
    metavar='sec',
    dest='timeout',
    type='float',
    default=15,
    help='Set the socket timeout (default %default seconds).',
)  # type: Callable[..., Option]

skip_requirements_regex = partial(
    Option,
    # A regex to be used to skip requirements
    '--skip-requirements-regex',
    dest='skip_requirements_regex',
    type='str',
    default='',
    help=SUPPRESS_HELP,
)  # type: Callable[..., Option]


def exists_action():
    # type: () -> Option
    return Option(
        # Option when path already exist
        '--exists-action',
        dest='exists_action',
        type='choice',
        choices=['s', 'i', 'w', 'b', 'a'],
        default=[],
        action='append',
        metavar='action',
        help="Default action when a path already exists: "
             "(s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort.",
    )


cert = partial(
    Option,
    '--cert',
    dest='cert',
    type='str',
    metavar='path',
    help="Path to alternate CA bundle.",
)  # type: Callable[..., Option]

client_cert = partial(
    Option,
    '--client-cert',
    dest='client_cert',
    type='str',
    default=None,
    metavar='path',
    help="Path to SSL client certificate, a single file containing the "
         "private key and the certificate in PEM format.",
)  # type: Callable[..., Option]

index_url = partial(
    Option,
    '-i', '--index-url', '--pypi-url',
    dest='index_url',
    metavar='URL',
    default=PyPI.simple_url,
    help="Base URL of the Python Package Index (default %default). "
         "This should point to a repository compliant with PEP 503 "
         "(the simple repository API) or a local directory laid out "
         "in the same format.",
)  # type: Callable[..., Option]


def extra_index_url():
    return Option(
        '--extra-index-url',
        dest='extra_index_urls',
        metavar='URL',
        action='append',
        default=[],
        help="Extra URLs of package indexes to use in addition to "
             "--index-url. Should follow the same rules as "
             "--index-url.",
    )


no_index = partial(
    Option,
    '--no-index',
    dest='no_index',
    action='store_true',
    default=False,
    help='Ignore package index (only looking at --find-links URLs instead).',
)  # type: Callable[..., Option]


def find_links():
    # type: () -> Option
    return Option(
        '-f', '--find-links',
        dest='find_links',
        action='append',
        default=[],
        metavar='url',
        help="If a url or path to an html file, then parse for links to "
             "archives. If a local path or file:// url that's a directory, "
             "then look for archives in the directory listing.",
    )


def trusted_host():
    # type: () -> Option
    return Option(
        "--trusted-host",
        dest="trusted_hosts",
        action="append",
        metavar="HOSTNAME",
        default=[],
        help="Mark this host or host:port pair as trusted, even though it "
             "does not have valid or any HTTPS.",
    )


def constraints():
    # type: () -> Option
    return Option(
        '-c', '--constraint',
        dest='constraints',
        action='append',
        default=[],
        metavar='file',
        help='Constrain versions using the given constraints file. '
        'This option can be used multiple times.'
    )


def requirements():
    # type: () -> Option
    return Option(
        '-r', '--requirement',
        dest='requirements',
        action='append',
        default=[],
        metavar='file',
        help='Install from the given requirements file. '
        'This option can be used multiple times.'
    )


def editable():
    # type: () -> Option
    return Option(
        '-e', '--editable',
        dest='editables',
        action='append',
        default=[],
        metavar='path/url',
        help=('Install a project in editable mode (i.e. setuptools '
              '"develop mode") from a local project path or a VCS url.'),
    )


src = partial(
    Option,
    '--src', '--source', '--source-dir', '--source-directory',
    dest='src_dir',
    metavar='dir',
    default=get_src_prefix(),
    help='Directory to check out editable projects into. '
    'The default in a virtualenv is "<venv path>/src". '
    'The default for global installs is "<current dir>/src".'
)  # type: Callable[..., Option]


def _get_format_control(values, option):
    # type: (Values, Option) -> Any
    """Get a format_control object."""
    return getattr(values, option.dest)


def _handle_no_binary(option, opt_str, value, parser):
    # type: (Option, str, str, OptionParser) -> None
    existing = _get_format_control(parser.values, option)
    FormatControl.handle_mutual_excludes(
        value, existing.no_binary, existing.only_binary,
    )


def _handle_only_binary(option, opt_str, value, parser):
    # type: (Option, str, str, OptionParser) -> None
    existing = _get_format_control(parser.values, option)
    FormatControl.handle_mutual_excludes(
        value, existing.only_binary, existing.no_binary,
    )


def no_binary():
    # type: () -> Option
    format_control = FormatControl(set(), set())
    return Option(
        "--no-binary", dest="format_control", action="callback",
        callback=_handle_no_binary, type="str",
        default=format_control,
        help="Do not use binary packages. Can be supplied multiple times, and "
             "each time adds to the existing value. Accepts either :all: to "
             "disable all binary packages, :none: to empty the set, or one or "
             "more package names with commas between them (no colons). Note "
             "that some packages are tricky to compile and may fail to "
             "install when this option is used on them.",
    )


def only_binary():
    # type: () -> Option
    format_control = FormatControl(set(), set())
    return Option(
        "--only-binary", dest="format_control", action="callback",
        callback=_handle_only_binary, type="str",
        default=format_control,
        help="Do not use source packages. Can be supplied multiple times, and "
             "each time adds to the existing value. Accepts either :all: to "
             "disable all source packages, :none: to empty the set, or one or "
             "more package names with commas between them. Packages without "
             "binary distributions will fail to install when this option is "
             "used on them.",
    )


platform = partial(
    Option,
    '--platform',
    dest='platform',
    metavar='platform',
    default=None,
    help=("Only use wheels compatible with <platform>. "
          "Defaults to the platform of the running system."),
)  # type: Callable[..., Option]


# This was made a separate function for unit-testing purposes.
def _convert_python_version(value):
    # type: (str) -> Tuple[Tuple[int, ...], Optional[str]]
    """
    Convert a version string like "3", "37", or "3.7.3" into a tuple of ints.

    :return: A 2-tuple (version_info, error_msg), where `error_msg` is
        non-None if and only if there was a parsing error.
    """
    if not value:
        # The empty string is the same as not providing a value.
        return (None, None)

    parts = value.split('.')
    if len(parts) > 3:
        return ((), 'at most three version parts are allowed')

    if len(parts) == 1:
        # Then we are in the case of "3" or "37".
        value = parts[0]
        if len(value) > 1:
            parts = [value[0], value[1:]]

    try:
        version_info = tuple(int(part) for part in parts)
    except ValueError:
        return ((), 'each version part must be an integer')

    return (version_info, None)


def _handle_python_version(option, opt_str, value, parser):
    # type: (Option, str, str, OptionParser) -> None
    """
    Handle a provided --python-version value.
    """
    version_info, error_msg = _convert_python_version(value)
    if error_msg is not None:
        msg = (
            'invalid --python-version value: {!r}: {}'.format(
                value, error_msg,
            )
        )
        raise_option_error(parser, option=option, msg=msg)

    parser.values.python_version = version_info


python_version = partial(
    Option,
    '--python-version',
    dest='python_version',
    metavar='python_version',
    action='callback',
    callback=_handle_python_version, type='str',
    default=None,
    help=dedent("""\
    The Python interpreter version to use for wheel and "Requires-Python"
    compatibility checks. Defaults to a version derived from the running
    interpreter. The version can be specified using up to three dot-separated
    integers (e.g. "3" for 3.0.0, "3.7" for 3.7.0, or "3.7.3"). A major-minor
    version can also be given as a string without dots (e.g. "37" for 3.7.0).
    """),
)  # type: Callable[..., Option]


implementation = partial(
    Option,
    '--implementation',
    dest='implementation',
    metavar='implementation',
    default=None,
    help=("Only use wheels compatible with Python "
          "implementation <implementation>, e.g. 'pp', 'jy', 'cp', "
          " or 'ip'. If not specified, then the current "
          "interpreter implementation is used.  Use 'py' to force "
          "implementation-agnostic wheels."),
)  # type: Callable[..., Option]


abi = partial(
    Option,
    '--abi',
    dest='abi',
    metavar='abi',
    default=None,
    help=("Only use wheels compatible with Python "
          "abi <abi>, e.g. 'pypy_41'.  If not specified, then the "
          "current interpreter abi tag is used.  Generally "
          "you will need to specify --implementation, "
          "--platform, and --python-version when using "
          "this option."),
)  # type: Callable[..., Option]


def add_target_python_options(cmd_opts):
    # type: (OptionGroup) -> None
    cmd_opts.add_option(platform())
    cmd_opts.add_option(python_version())
    cmd_opts.add_option(implementation())
    cmd_opts.add_option(abi())


def make_target_python(options):
    # type: (Values) -> TargetPython
    target_python = TargetPython(
        platform=options.platform,
        py_version_info=options.python_version,
        abi=options.abi,
        implementation=options.implementation,
    )

    return target_python


def prefer_binary():
    # type: () -> Option
    return Option(
        "--prefer-binary",
        dest="prefer_binary",
        action="store_true",
        default=False,
        help="Prefer older binary packages over newer source packages."
    )


cache_dir = partial(
    Option,
    "--cache-dir",
    dest="cache_dir",
    default=USER_CACHE_DIR,
    metavar="dir",
    help="Store the cache data in <dir>."
)  # type: Callable[..., Option]


def _handle_no_cache_dir(option, opt, value, parser):
    # type: (Option, str, str, OptionParser) -> None
    """
    Process a value provided for the --no-cache-dir option.

    This is an optparse.Option callback for the --no-cache-dir option.
    """
    # The value argument will be None if --no-cache-dir is passed via the
    # command-line, since the option doesn't accept arguments.  However,
    # the value can be non-None if the option is triggered e.g. by an
    # environment variable, like PIP_NO_CACHE_DIR=true.
    if value is not None:
        # Then parse the string value to get argument error-checking.
        try:
            strtobool(value)
        except ValueError as exc:
            raise_option_error(parser, option=option, msg=str(exc))

    # Originally, setting PIP_NO_CACHE_DIR to a value that strtobool()
    # converted to 0 (like "false" or "no") caused cache_dir to be disabled
    # rather than enabled (logic would say the latter).  Thus, we disable
    # the cache directory not just on values that parse to True, but (for
    # backwards compatibility reasons) also on values that parse to False.
    # In other words, always set it to False if the option is provided in
    # some (valid) form.
    parser.values.cache_dir = False


no_cache = partial(
    Option,
    "--no-cache-dir",
    dest="cache_dir",
    action="callback",
    callback=_handle_no_cache_dir,
    help="Disable the cache.",
)  # type: Callable[..., Option]

no_deps = partial(
    Option,
    '--no-deps', '--no-dependencies',
    dest='ignore_dependencies',
    action='store_true',
    default=False,
    help="Don't install package dependencies.",
)  # type: Callable[..., Option]

build_dir = partial(
    Option,
    '-b', '--build', '--build-dir', '--build-directory',
    dest='build_dir',
    metavar='dir',
    help='Directory to unpack packages into and build in. Note that '
         'an initial build still takes place in a temporary directory. '
         'The location of temporary directories can be controlled by setting '
         'the TMPDIR environment variable (TEMP on Windows) appropriately. '
         'When passed, build directories are not cleaned in case of failures.'
)  # type: Callable[..., Option]

ignore_requires_python = partial(
    Option,
    '--ignore-requires-python',
    dest='ignore_requires_python',
    action='store_true',
    help='Ignore the Requires-Python information.'
)  # type: Callable[..., Option]

no_build_isolation = partial(
    Option,
    '--no-build-isolation',
    dest='build_isolation',
    action='store_false',
    default=True,
    help='Disable isolation when building a modern source distribution. '
         'Build dependencies specified by PEP 518 must be already installed '
         'if this option is used.'
)  # type: Callable[..., Option]


def _handle_no_use_pep517(option, opt, value, parser):
    # type: (Option, str, str, OptionParser) -> None
    """
    Process a value provided for the --no-use-pep517 option.

    This is an optparse.Option callback for the no_use_pep517 option.
    """
    # Since --no-use-pep517 doesn't accept arguments, the value argument
    # will be None if --no-use-pep517 is passed via the command-line.
    # However, the value can be non-None if the option is triggered e.g.
    # by an environment variable, for example "PIP_NO_USE_PEP517=true".
    if value is not None:
        msg = """A value was passed for --no-use-pep517,
        probably using either the PIP_NO_USE_PEP517 environment variable
        or the "no-use-pep517" config file option. Use an appropriate value
        of the PIP_USE_PEP517 environment variable or the "use-pep517"
        config file option instead.
        """
        raise_option_error(parser, option=option, msg=msg)

    # Otherwise, --no-use-pep517 was passed via the command-line.
    parser.values.use_pep517 = False


use_pep517 = partial(
    Option,
    '--use-pep517',
    dest='use_pep517',
    action='store_true',
    default=None,
    help='Use PEP 517 for building source distributions '
         '(use --no-use-pep517 to force legacy behaviour).'
)  # type: Any

no_use_pep517 = partial(
    Option,
    '--no-use-pep517',
    dest='use_pep517',
    action='callback',
    callback=_handle_no_use_pep517,
    default=None,
    help=SUPPRESS_HELP
)  # type: Any

install_options = partial(
    Option,
    '--install-option',
    dest='install_options',
    action='append',
    metavar='options',
    help="Extra arguments to be supplied to the setup.py install "
         "command (use like --install-option=\"--install-scripts=/usr/local/"
         "bin\"). Use multiple --install-option options to pass multiple "
         "options to setup.py install. If you are using an option with a "
         "directory path, be sure to use absolute path.",
)  # type: Callable[..., Option]

global_options = partial(
    Option,
    '--global-option',
    dest='global_options',
    action='append',
    metavar='options',
    help="Extra global options to be supplied to the setup.py "
         "call before the install command.",
)  # type: Callable[..., Option]

no_clean = partial(
    Option,
    '--no-clean',
    action='store_true',
    default=False,
    help="Don't clean up build directories."
)  # type: Callable[..., Option]

pre = partial(
    Option,
    '--pre',
    action='store_true',
    default=False,
    help="Include pre-release and development versions. By default, "
         "pip only finds stable versions.",
)  # type: Callable[..., Option]

disable_pip_version_check = partial(
    Option,
    "--disable-pip-version-check",
    dest="disable_pip_version_check",
    action="store_true",
    default=False,
    help="Don't periodically check PyPI to determine whether a new version "
         "of pip is available for download. Implied with --no-index.",
)  # type: Callable[..., Option]


# Deprecated, Remove later
always_unzip = partial(
    Option,
    '-Z', '--always-unzip',
    dest='always_unzip',
    action='store_true',
    help=SUPPRESS_HELP,
)  # type: Callable[..., Option]


def _handle_merge_hash(option, opt_str, value, parser):
    # type: (Option, str, str, OptionParser) -> None
    """Given a value spelled "algo:digest", append the digest to a list
    pointed to in a dict by the algo name."""
    if not parser.values.hashes:
        parser.values.hashes = {}
    try:
        algo, digest = value.split(':', 1)
    except ValueError:
        parser.error('Arguments to %s must be a hash name '
                     'followed by a value, like --hash=sha256:abcde...' %
                     opt_str)
    if algo not in STRONG_HASHES:
        parser.error('Allowed hash algorithms for %s are %s.' %
                     (opt_str, ', '.join(STRONG_HASHES)))
    parser.values.hashes.setdefault(algo, []).append(digest)


hash = partial(
    Option,
    '--hash',
    # Hash values eventually end up in InstallRequirement.hashes due to
    # __dict__ copying in process_line().
    dest='hashes',
    action='callback',
    callback=_handle_merge_hash,
    type='string',
    help="Verify that the package's archive matches this "
         'hash before installing. Example: --hash=sha256:abcdef...',
)  # type: Callable[..., Option]


require_hashes = partial(
    Option,
    '--require-hashes',
    dest='require_hashes',
    action='store_true',
    default=False,
    help='Require a hash to check each requirement against, for '
         'repeatable installs. This option is implied when any package in a '
         'requirements file has a --hash option.',
)  # type: Callable[..., Option]


list_path = partial(
    Option,
    '--path',
    dest='path',
    action='append',
    help='Restrict to the specified installation path for listing '
         'packages (can be used multiple times).'
)  # type: Callable[..., Option]


def check_list_path_option(options):
    # type: (Values) -> None
    if options.path and (options.user or options.local):
        raise CommandError(
            "Cannot combine '--path' with '--user' or '--local'"
        )


##########
# groups #
##########

general_group = {
    'name': 'General Options',
    'options': [
        help_,
        isolated_mode,
        require_virtualenv,
        verbose,
        version,
        quiet,
        log,
        no_input,
        proxy,
        retries,
        timeout,
        skip_requirements_regex,
        exists_action,
        trusted_host,
        cert,
        client_cert,
        cache_dir,
        no_cache,
        disable_pip_version_check,
        no_color,
    ]
}  # type: Dict[str, Any]

index_group = {
    'name': 'Package Index Options',
    'options': [
        index_url,
        extra_index_url,
        no_index,
        find_links,
    ]
}  # type: Dict[str, Any]
PK��[���main_parser.pynu�[���"""A single place for constructing and exposing the main parser
"""

import os
import sys

from pip._internal.cli import cmdoptions
from pip._internal.cli.parser import (
    ConfigOptionParser,
    UpdatingDefaultsHelpFormatter,
)
from pip._internal.commands import commands_dict, get_similar_commands
from pip._internal.exceptions import CommandError
from pip._internal.utils.misc import get_pip_version, get_prog
from pip._internal.utils.typing import MYPY_CHECK_RUNNING

if MYPY_CHECK_RUNNING:
    from typing import Tuple, List


__all__ = ["create_main_parser", "parse_command"]


def create_main_parser():
    # type: () -> ConfigOptionParser
    """Creates and returns the main parser for pip's CLI
    """

    parser_kw = {
        'usage': '\n%prog <command> [options]',
        'add_help_option': False,
        'formatter': UpdatingDefaultsHelpFormatter(),
        'name': 'global',
        'prog': get_prog(),
    }

    parser = ConfigOptionParser(**parser_kw)
    parser.disable_interspersed_args()

    parser.version = get_pip_version()

    # add the general options
    gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser)
    parser.add_option_group(gen_opts)

    # so the help formatter knows
    parser.main = True  # type: ignore

    # create command listing for description
    description = [''] + [
        '%-27s %s' % (name, command_info.summary)
        for name, command_info in commands_dict.items()
    ]
    parser.description = '\n'.join(description)

    return parser


def parse_command(args):
    # type: (List[str]) -> Tuple[str, List[str]]
    parser = create_main_parser()

    # Note: parser calls disable_interspersed_args(), so the result of this
    # call is to split the initial args into the general options before the
    # subcommand and everything else.
    # For example:
    #  args: ['--timeout=5', 'install', '--user', 'INITools']
    #  general_options: ['--timeout==5']
    #  args_else: ['install', '--user', 'INITools']
    general_options, args_else = parser.parse_args(args)

    # --version
    if general_options.version:
        sys.stdout.write(parser.version)  # type: ignore
        sys.stdout.write(os.linesep)
        sys.exit()

    # pip || pip help -> print_help()
    if not args_else or (args_else[0] == 'help' and len(args_else) == 1):
        parser.print_help()
        sys.exit()

    # the subcommand name
    cmd_name = args_else[0]

    if cmd_name not in commands_dict:
        guess = get_similar_commands(cmd_name)

        msg = ['unknown command "%s"' % cmd_name]
        if guess:
            msg.append('maybe you meant "%s"' % guess)

        raise CommandError(' - '.join(msg))

    # all the args without the subcommand
    cmd_args = args[:]
    cmd_args.remove(cmd_name)

    return cmd_name, cmd_args
PK��[�-��]]*__pycache__/command_context.cpython-38.pycnu�[���U

��.e�@s,ddlmZddlmZGdd�de�ZdS)�)�contextmanager)�	ExitStackcs0eZdZ�fdd�Zedd��Zdd�Z�ZS)�CommandContextMixIncs tt|���d|_t�|_dS)NF)�superr�__init__�_in_main_contextr�
_main_context��self��	__class__��E/usr/lib/python3.8/site-packages/pip/_internal/cli/command_context.pyr
szCommandContextMixIn.__init__c	cs:|jr
t�d|_z|j�dVW5QRXW5d|_XdS)NTF)r�AssertionErrorrr	r
r
r�main_contexts
z CommandContextMixIn.main_contextcCs|js
t�|j�|�S)N)rrr�
enter_context)r
Zcontext_providerr
r
rrs
z!CommandContextMixIn.enter_context)�__name__�
__module__�__qualname__rrrr�
__classcell__r
r
rrr	s

rN)�
contextlibrZpip._vendor.contextlib2r�objectrr
r
r
r�<module>sPK��[4��FKFK+__pycache__/cmdoptions.cpython-38.opt-1.pycnu�[���U

��.e�h�@s�dZddlmZddlZddlZddlZddlmZddlm	Z	ddl
mZmZm
Z
ddlmZddlmZdd	lmZmZdd
lmZddlmZddlmZdd
lmZddlmZddlmZe�rddl m!Z!m"Z"m#Z#m$Z$m%Z%ddl
m&Z&m'Z'ddl(m)Z)e�*e+�Z,dd�Z-dd�Z.d�dd�Z/d�dd�Z0e	edddddd �Z1e	ed!d"d#dd$d%�Z2e	ed&d'd(d#ded%�Z3e	ed)d*d+d,dd-d%�Z4e	ed.d/d#dd0d%�Z5e	ed1d2d3d#d4d �Z6e	ed5d6d7d,dd8d%�Z7e	ed9d:d;e8e�9��d<d=d>�:e�9��d?d@�Z;e	edAdBdCdDdEdFdG�Z<e	edHdId#ded%�Z=e	edJdKdLdMdNdO�Z>e	edPdQdRdSdTdO�Z?e	edUdVdWdXdYdZd[d\�Z@e	ed]d^dLdMedO�ZAd_d`�ZBe	edadbdLdEdcdd�ZCe	ededfdLddEdgdh�ZDe	edidjdkdldmejEdndo�ZFdpdq�ZGe	edrdsd#ddtd%�ZHdudv�ZIdwdx�ZJdydz�ZKd{d|�ZLd}d~�ZMe	edd�d�d�d�d�e�d�do�	ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSe	ed�d�d�dd�do�ZTd�d��ZUd�d��ZVe	ed�d�d�d�eVdLded��d��	ZWe	ed�d�d�dd�do�ZXe	ed�d�d�dd�do�ZYd�d��ZZd�d��Z[d�d��Z\e	ed�d�ed�d�d��Z]d�d��Z^e	ed�d�d�e^d�d��Z_e	ed�d�d�d#dd�d%�Z`e	ed�d�d�d�d�d�d�dG�Zae	ed�d�d#d�d �Zbe	ed�d�d�d�d�d%�Zcd�dĄZde	ed�d�d#dd�d%�Zee	ed�d�d�eddedɍZfe	ed�d�d�d�d�dύZge	ed�d�d�d�d�dύZhe	ed�d#dd�dՍZie	ed�d#dd�dՍZje	ed�d�d#dd�d%�Zke	ed�d�d�d#ed �Zld�d߄Zme	ed�d�d�emd�d�d�Zne	ed�d�d#dd�d%�Zoe	ed�dEd�d�d �Zpd�d�Zqd�e1e2e3e4e6e7e<e=e>e?e@eAeBeJeCeDe]e_eke5gd�Zrd�eFeGeHeIgd�ZsdS)�aC
shared options and groups

The principle here is to define options once, but *not* instantiate them
globally. One reason being that options with action='append' can carry state
between parses. pip parses general options twice internally, and shouldn't
pass on state. To be consistent, all options will follow this design.
�)�absolute_importN)�	strtobool)�partial)�
SUPPRESS_HELP�Option�OptionGroup)�dedent)�CommandError)�USER_CACHE_DIR�get_src_prefix)�
FormatControl)�PyPI)�TargetPython)�
STRONG_HASHES)�MYPY_CHECK_RUNNING)�	BAR_TYPES)�Any�Callable�Dict�Optional�Tuple)�OptionParser�Values)�ConfigOptionParsercCs.d�||�}t�d�|����}|�|�dS)z�
    Raise an option parsing error using parser.error().

    Args:
      parser: an OptionParser instance.
      option: an Option instance.
      msg: the error text.
    z{} error: {}� N)�format�textwrapZfill�join�split�error)�parser�option�msg�r#�@/usr/lib/python3.8/site-packages/pip/_internal/cli/cmdoptions.py�raise_option_error)s	r%cCs,t||d�}|dD]}|�|��q|S)z�
    Return an OptionGroup object
    group  -- assumed to be dict with 'name' and 'options' keys
    parser -- an optparse Parser
    �name�options)r�
add_option)�groupr Zoption_groupr!r#r#r$�make_option_group7sr*csP�dkr|��fdd�}dddg}tt||��rL|j}|��tjddd	�dS)
z�Disable wheels if per-setup.py call options are set.

    :param options: The OptionParser options to update.
    :param check_options: The options to check, if not supplied defaults to
        options.
    Ncst�|d�S�N)�getattr)�n��
check_optionsr#r$�getnameOsz+check_install_build_global.<locals>.getnameZ
build_options�global_options�install_optionszeDisabling all use of wheels due to the use of --build-options / --global-options / --install-options.�)�
stacklevel)�any�map�format_controlZdisallow_binaries�warnings�warn)r'r/r0�namesZcontrolr#r.r$�check_install_build_globalDs
�r;FcCsbt|j|j|j|jg�}tt�dh�}|j|ko6|j}|rH|rHt	d��|r^|r^|j
s^t	d��dS)z�Function for determining if custom platform options are allowed.

    :param options: The OptionParser options.
    :param check_target: Whether or not to check if --target is being used.
    z:all:z�When restricting platform and interpreter constraints using --python-version, --platform, --abi, or --implementation, either --no-deps must be set, or --only-binary=:all: must be set and --no-binary must not be set (or must be set to :none:).zQCan not use any platform or abi specific options unless installing via '--target'N)r5�python_version�platform�abi�implementationr�setr7�ignore_dependenciesr	Z
target_dir)r'Zcheck_targetZdist_restriction_setZbinary_onlyZsdist_dependencies_allowedr#r#r$�check_dist_restriction[s&�
��
�rBz-hz--help�helpz
Show help.)�dest�actionrCz
--isolated�
isolated_mode�
store_truezSRun pip in an isolated mode, ignoring environment variables and user configuration.�rDrE�defaultrCz--require-virtualenvz--require-venvZrequire_venvz-vz	--verbose�verbose�countzDGive more output. Option is additive, and can be used up to 3 times.z
--no-color�no_colorzSuppress colored outputz-Vz	--version�versionzShow version and exit.z-qz--quiet�quietz�Give less output. Option is additive, and can be used up to 3 times (corresponding to WARNING, ERROR, and CRITICAL logging levels).z--progress-bar�progress_bar�choiceZonz*Specify type of progress to be displayed [�|z] (default: %default))rD�type�choicesrIrCz--logz
--log-filez--local-log�log�pathz Path to a verbose appending log.)rD�metavarrCz
--no-input�no_inputz--proxy�proxy�str�z<Specify a proxy in the form [user:passwd@]proxy.server:port.)rDrRrIrCz	--retries�retries�int�zRMaximum number of retries each connection should attempt (default %default times).z	--timeoutz--default-timeoutZsec�timeout�float�z2Set the socket timeout (default %default seconds).)rVrDrRrIrCz--skip-requirements-regex�skip_requirements_regexc
Cs"tddddddddggd	d
dd�S)
Nz--exists-action�
exists_actionrP�s�i�w�b�a�appendrEzYDefault action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort.)rDrRrSrIrErVrC�rr#r#r#r$rbs�rbz--cert�certzPath to alternate CA bundle.)rDrRrVrCz
--client-cert�client_certzkPath to SSL client certificate, a single file containing the private key and the certificate in PEM format.)rDrRrIrVrCz-iz--index-urlz
--pypi-url�	index_url�URLz�Base URL of the Python Package Index (default %default). This should point to a repository compliant with PEP 503 (the simple repository API) or a local directory laid out in the same format.)rDrVrIrCcCstddddgdd�S)Nz--extra-index-urlZextra_index_urlsrmrhzmExtra URLs of package indexes to use in addition to --index-url. Should follow the same rules as --index-url.)rDrVrErIrCrir#r#r#r$�extra_index_urlDs�rnz
--no-index�no_indexzAIgnore package index (only looking at --find-links URLs instead).c	Cstddddgddd�S)Nz-fz--find-links�
find_linksrhZurlz�If a url or path to an html file, then parse for links to archives. If a local path or file:// url that's a directory, then look for archives in the directory listing.�rDrErIrVrCrir#r#r#r$rp[s�rpcCstddddgdd�S)Nz--trusted-hostZ
trusted_hostsrhZHOSTNAMEz]Mark this host or host:port pair as trusted, even though it does not have valid or any HTTPS.)rDrErVrIrCrir#r#r#r$�trusted_hostis�rrc	Cstddddgddd�S)Nz-cz--constraint�constraintsrh�filez\Constrain versions using the given constraints file. This option can be used multiple times.rqrir#r#r#r$rsvs�rsc	Cstddddgddd�S)Nz-rz
--requirement�requirementsrhrtzQInstall from the given requirements file. This option can be used multiple times.rqrir#r#r#r$ru�s�ruc	Cstddddgddd�S)Nz-ez
--editableZ	editablesrhzpath/urlzkInstall a project in editable mode (i.e. setuptools "develop mode") from a local project path or a VCS url.rqrir#r#r#r$�editable�s�rvz--srcz--sourcez--source-dirz--source-directoryZsrc_dir�dirz�Directory to check out editable projects into. The default in a virtualenv is "<venv path>/src". The default for global installs is "<current dir>/src".cCst||j�S)zGet a format_control object.)r,rD)�valuesr!r#r#r$�_get_format_control�srycCs"t|j|�}t�||j|j�dSr+)ryrxr�handle_mutual_excludes�	no_binary�only_binary�r!�opt_str�valuer Zexistingr#r#r$�_handle_no_binary�s�r�cCs"t|j|�}t�||j|j�dSr+)ryrxrrzr|r{r}r#r#r$�_handle_only_binary�s�r�c	Cs$tt�t��}tdddtd|dd�S)Nz--no-binaryr7�callbackrYa^Do not use binary packages. Can be supplied multiple times, and each time adds to the existing value. Accepts either :all: to disable all binary packages, :none: to empty the set, or one or more package names with commas between them (no colons). Note that some packages are tricky to compile and may fail to install when this option is used on them.�rDrEr�rRrIrC)rr@rr��r7r#r#r$r{�s�r{c	Cs$tt�t��}tdddtd|dd�S)Nz
--only-binaryr7r�rYaGDo not use source packages. Can be supplied multiple times, and each time adds to the existing value. Accepts either :all: to disable all source packages, :none: to empty the set, or one or more package names with commas between them. Packages without binary distributions will fail to install when this option is used on them.r�)rr@rr�r�r#r#r$r|�s�r|z
--platformr=z[Only use wheels compatible with <platform>. Defaults to the platform of the running system.cCs�|sdS|�d�}t|�dkr"dSt|�dkrV|d}t|�dkrV|d|dd�g}ztdd	�|D��}Wntk
r�Yd
SX|dfS)z�
    Convert a version string like "3", "37", or "3.7.3" into a tuple of ints.

    :return: A 2-tuple (version_info, error_msg), where `error_msg` is
        non-None if and only if there was a parsing error.
    )NN�.�)r#z'at most three version parts are allowed�rNcss|]}t|�VqdSr+)r\)�.0�partr#r#r$�	<genexpr>sz*_convert_python_version.<locals>.<genexpr>)r#z$each version part must be an integer)r�len�tuple�
ValueError)r�parts�version_infor#r#r$�_convert_python_version�s
r�cCs:t|�\}}|dk	r.d�||�}t|||d�||j_dS)z3
    Handle a provided --python-version value.
    Nz(invalid --python-version value: {!r}: {}�r!r")r�rr%rxr<)r!r~rr r�Z	error_msgr"r#r#r$�_handle_python_version	s��r�z--python-versionr<r�a�    The Python interpreter version to use for wheel and "Requires-Python"
    compatibility checks. Defaults to a version derived from the running
    interpreter. The version can be specified using up to three dot-separated
    integers (e.g. "3" for 3.0.0, "3.7" for 3.7.0, or "3.7.3"). A major-minor
    version can also be given as a string without dots (e.g. "37" for 3.7.0).
    )rDrVrEr�rRrIrCz--implementationr?z�Only use wheels compatible with Python implementation <implementation>, e.g. 'pp', 'jy', 'cp',  or 'ip'. If not specified, then the current interpreter implementation is used.  Use 'py' to force implementation-agnostic wheels.z--abir>z�Only use wheels compatible with Python abi <abi>, e.g. 'pypy_41'.  If not specified, then the current interpreter abi tag is used.  Generally you will need to specify --implementation, --platform, and --python-version when using this option.cCs4|�t��|�t��|�t��|�t��dSr+)r(r=r<r?r>)Zcmd_optsr#r#r$�add_target_python_optionsIsr�cCst|j|j|j|jd�}|S)N)r=Zpy_version_infor>r?)rr=r<r>r?)r'Z
target_pythonr#r#r$�make_target_pythonQs�r�cCstdddddd�S)Nz--prefer-binary�
prefer_binaryrGFz8Prefer older binary packages over newer source packages.rHrir#r#r#r$r�]s�r�z--cache-dir�	cache_dirzStore the cache data in <dir>.)rDrIrVrCc
CsV|dk	rJzt|�Wn4tk
rH}zt||t|�d�W5d}~XYnXd|j_dS)z�
    Process a value provided for the --no-cache-dir option.

    This is an optparse.Option callback for the --no-cache-dir option.
    Nr�F)rr�r%rYrxr�)r!�optrr �excr#r#r$�_handle_no_cache_dirrs$	r�z--no-cache-dirzDisable the cache.)rDrEr�rCz	--no-depsz--no-dependenciesrAz#Don't install package dependencies.z-bz--buildz--build-dirz--build-directory�	build_dira>Directory to unpack packages into and build in. Note that an initial build still takes place in a temporary directory. The location of temporary directories can be controlled by setting the TMPDIR environment variable (TEMP on Windows) appropriately. When passed, build directories are not cleaned in case of failures.z--ignore-requires-python�ignore_requires_pythonz'Ignore the Requires-Python information.z--no-build-isolationZbuild_isolationZstore_falseTz�Disable isolation when building a modern source distribution. Build dependencies specified by PEP 518 must be already installed if this option is used.cCs&|dk	rd}t|||d�d|j_dS)z�
    Process a value provided for the --no-use-pep517 option.

    This is an optparse.Option callback for the no_use_pep517 option.
    Na0A value was passed for --no-use-pep517,
        probably using either the PIP_NO_USE_PEP517 environment variable
        or the "no-use-pep517" config file option. Use an appropriate value
        of the PIP_USE_PEP517 environment variable or the "use-pep517"
        config file option instead.
        r�F)r%rx�
use_pep517)r!r�rr r"r#r#r$�_handle_no_use_pep517�sr�z--use-pep517r�z^Use PEP 517 for building source distributions (use --no-use-pep517 to force legacy behaviour).z--no-use-pep517)rDrEr�rIrCz--install-optionr2rhr'a"Extra arguments to be supplied to the setup.py install command (use like --install-option="--install-scripts=/usr/local/bin"). Use multiple --install-option options to pass multiple options to setup.py install. If you are using an option with a directory path, be sure to use absolute path.)rDrErVrCz--global-optionr1zTExtra global options to be supplied to the setup.py call before the install command.z
--no-cleanz!Don't clean up build directories.)rErIrCz--prezYInclude pre-release and development versions. By default, pip only finds stable versions.z--disable-pip-version-check�disable_pip_version_checkz{Don't periodically check PyPI to determine whether a new version of pip is available for download. Implied with --no-index.z-Zz--always-unzip�always_unzipcCs�|jjsi|j_z|�dd�\}}Wn"tk
rF|�d|�YnX|tkrh|�d|d�t�f�|jj�|g��|�dS)zkGiven a value spelled "algo:digest", append the digest to a list
    pointed to in a dict by the algo name.�:r�zTArguments to %s must be a hash name followed by a value, like --hash=sha256:abcde...z&Allowed hash algorithms for %s are %s.z, N)	rx�hashesrr�rrr�
setdefaultrh)r!r~rr ZalgoZdigestr#r#r$�_handle_merge_hash)s��r�z--hashr��stringzgVerify that the package's archive matches this hash before installing. Example: --hash=sha256:abcdef...)rDrEr�rRrCz--require-hashes�require_hashesz�Require a hash to check each requirement against, for repeatable installs. This option is implied when any package in a requirements file has a --hash option.z--pathz^Restrict to the specified installation path for listing packages (can be used multiple times).cCs|jr|js|jrtd��dS)Nz2Cannot combine '--path' with '--user' or '--local')rU�userZlocalr	)r'r#r#r$�check_list_path_option_s�r�zGeneral Options)r&r'zPackage Index Options)N)F)t�__doc__Z
__future__rZloggingrr8Zdistutils.utilr�	functoolsrZoptparserrrrZpip._internal.exceptionsr	Zpip._internal.locationsr
rZ#pip._internal.models.format_controlrZpip._internal.models.indexr
Z"pip._internal.models.target_pythonrZpip._internal.utils.hashesrZpip._internal.utils.typingrZpip._internal.utils.uir�typingrrrrrrrZpip._internal.cli.parserrZ	getLogger�__name__Zloggerr%r*r;rBZhelp_rFZrequire_virtualenvrJrLrMrN�list�keysrrOrTrWrXr[r^rarbrjrkZ
simple_urlrlrnrorprrrsrurv�srcryr�r�r{r|r=r�r�r<r?r>r�r�r�r�r�Zno_cacheZno_depsr�r�Zno_build_isolationr�r�Z
no_use_pep517r2r1Zno_cleanZprer�r�r��hashr�Z	list_pathr�Z
general_groupZindex_groupr#r#r#r$�<module>sB



,���
�	�	��

���
��
�	�
�
��	��

�




������
�	�	����
�
�
�
��	��	���

����PK��[�qq)__pycache__/autocompletion.cpython-38.pycnu�[���U

��.e�@s`dZddlZddlZddlZddlmZddlmZmZddl	m
Z
dd�Zdd	�Zd
d�Z
dS)zBLogic that powers autocompletion installed by ``pip completion``.
�N)�create_main_parser)�
commands_dict�create_command)�get_installed_distributionscs�dtjkrdStjd��dd�}ttjd�}z||d�Wntk
rZd�YnXtt��g}z�fdd�|D�d	}Wntk
r�d}YnXt�}|�r:|d
kr�t�	d�|dkö�
d�}|�r>g}���}td
d�D].}|j
�
|�r�|j
|dd�kr�|�|j
�q�|�r>|D]}t|��q$t�	d�t|�}	|	jjD]8}
|
jtjk�rN|
j|
jD]}|�||
jf��ql�qNdd�|d|d�D���fdd�|D�}�fdd�|D�}t|||	jj�}|�r�t�|�}dd�|D�}|D]>}
|
d	}|
d�r,|
d	dd�dk�r,|d7}t|��q�n�dd�|jD�}|�|j�dd�|D�}��
d��r�|D]$}
|
jtjk�rt�|
j|
j7��qtnt|||�}|�r�t�|��td��fdd��D���t�	d�dS)z?Entry Point for completion of main and subcommand options.
    ZPIP_AUTO_COMPLETENZ
COMP_WORDS�Z
COMP_CWORD�csg|]}|�kr|�qS�r)�.0�w)�subcommandsr�D/usr/lib/python3.8/site-packages/pip/_internal/cli/autocompletion.py�
<listcomp>!sz autocomplete.<locals>.<listcomp>r�help)ZshowZ	uninstall�-T)Z
local_onlycSsg|]}|�d�d�qS)�=r)�split�r	�xrrrr
Dscs g|]\}}|�kr||f�qSrr)r	r�v)�	prev_optsrrr
Escs"g|]\}}|���r||f�qSr��
startswith)r	�kr��currentrrr
Gs
css|]}|dfVqdS)rNr)r	�optrrr�	<genexpr>Pszautocomplete.<locals>.<genexpr>�z--rcSsg|]
}|j�qSr)�option_list)r	�irrrr
Zscss|]}|D]
}|Vq
qdS�Nr)r	�it�orrrr\s� csg|]}|���r|�qSrrrrrrr
gs
)�os�environr�int�
IndexError�listrr�sys�exitr�lowerr�key�append�printr�parserZoption_list_allr�optparse�
SUPPRESS_HELPZ
_long_optsZ_short_opts�nargs�get_path_completion_type�auto_complete_pathsZ
option_groupsr�join)�cwords�cwordZoptionsZsubcommand_namer/Zshould_list_installedZ	installedZlcZdistZ
subcommandrZopt_str�completion_typeZoptionZ	opt_label�optsr)rrrr�autocompletes�




�
�
 
r:cCs�|dks||d�d�sdS|D]n}|jtjkr4q"t|��d�D]L}||d�d�d|krB|jr�tdd�|j�d�D��rB|jSqBq"dS)	aLGet the type of path completion (``file``, ``dir``, ``path`` or None)

    :param cwords: same as the environmental variable ``COMP_WORDS``
    :param cword: same as the environmental variable ``COMP_CWORD``
    :param opts: The available options to check
    :return: path completion type (``file``, ``dir``, ``path`` or None)
    rrN�/rrcss|]}|dkVqdS))�path�file�dirNrrrrrrzs�z+get_path_completion_type.<locals>.<genexpr>)rrr0r1�strr�metavar�any)r6r7r9rr"rrrr3ks
�r3c#s�tj�|�\}�tj�|�}t�|tj�s.dStj�����fdd�t�|�D�}|D]`}tj�||�}tj�tj�||��}|dkr�tj�	|�r�|VqVtj�
|�rVtj�|d�VqVdS)aoIf ``completion_type`` is ``file`` or ``path``, list all regular files
    and directories starting with ``current``; otherwise only list directories
    starting with ``current``.

    :param current: The word to be completed
    :param completion_type: path completion type(`file`, `path` or `dir`)i
    :return: A generator of regular files and/or directories
    Nc3s$|]}tj�|����r|VqdSr )r$r<�normcaserr��filenamerrr�s�z&auto_complete_paths.<locals>.<genexpr>r>r)r$r<r�abspath�access�R_OKrB�listdirr5�isfile�isdir)rr8Z	directoryZcurrent_pathZ	file_list�frZ	comp_filerrCrr4�s	r4)�__doc__r0r$r)Zpip._internal.cli.main_parserrZpip._internal.commandsrrZpip._internal.utils.miscrr:r3r4rrrr�<module>s[PK��[p,3�FF&__pycache__/req_command.cpython-38.pycnu�[���U

��.ec,�@sXdZddlZddlmZddlmZddlmZddlm	Z	ddl
mZddlm
Z
dd	lmZdd
lmZddlmZddlmZmZmZdd
lmZddlmZmZddlmZddlm Z e �r"ddl!m"Z"ddl#m$Z$m%Z%m&Z&ddl'm(Z(ddl)m*Z*ddl+m,Z,ddl-m.Z.ddl/m0Z0Gdd�de�Z1Gdd�dee1�Z2Gdd�de2�Z3dS)aContains the Command base classes that depend on PipSession.

The classes in this module are in a separate module so the commands not
needing download / PackageFinder capability don't unnecessarily import the
PackageFinder machinery and all its vendored dependencies, etc.
�N)�partial)�Command)�CommandContextMixIn)�CommandError)�
PackageFinder)�Resolver)�SelectionPreferences)�
PipSession)�RequirementPreparer)�install_req_from_editable�install_req_from_line�install_req_from_req_string)�parse_requirements)�make_link_collector�pip_self_version_check)�normalize_path)�MYPY_CHECK_RUNNING)�Values)�List�Optional�Tuple)�
WheelCache)�TargetPython)�RequirementSet)�RequirementTracker)�
TempDirectorycs>eZdZdZ�fdd�Zedd��Zdd�Zdd	d
�Z�Z	S)�SessionCommandMixinzE
    A class mixin for command classes needing _build_session().
    cstt|���d|_dS)N)�superr�__init__�_session)�self��	__class__��A/usr/lib/python3.8/site-packages/pip/_internal/cli/req_command.pyr2szSessionCommandMixin.__init__cCsLg}t|dd�s*t|dd�}|r*|�|�t|dd�}|rD|�|�|pJdS)z7Return a list of index urls from user-provided options.�no_indexFZ	index_urlNZextra_index_urls)�getattr�append�extend)�cls�options�
index_urlsZurlZurlsr#r#r$�_get_index_urls6s

z#SessionCommandMixin._get_index_urlscCs"|jdkr|�|�|��|_|jS)zGet a default-managed session.N)r�
enter_context�_build_session)r r*r#r#r$�get_default_sessionDs
z'SessionCommandMixin.get_default_sessionNcCs�t|jrttj�|jd��nd|dk	r*|n|j|j|�|�d�}|j	rN|j	|_
|jr\|j|_	|jsf|rz|dk	rr|n|j|_|j
r�|j
|j
d�|_|j|j_|S)N�http)�cache�retries�
trusted_hostsr+)r0Zhttps)r	�	cache_dirr�os�path�joinr2r3r,ZcertZverifyZclient_cert�timeout�proxyZproxiesZno_inputZauthZ	prompting)r r*r2r8�sessionr#r#r$r.Ks*��
��z"SessionCommandMixin._build_session)NN)
�__name__�
__module__�__qualname__�__doc__r�classmethodr,r/r.�
__classcell__r#r#r!r$r-s

rc@seZdZdZdd�ZdS)�IndexGroupCommandz�
    Abstract base class for commands with the index_group options.

    This also corresponds to the commands that permit the pip version check.
    c	CsTt|d�st�|js|jrdS|j|dtd|j�d�}|�t||�W5QRXdS)z�
        Do the pip version check if not disabled.

        This overrides the default behavior of not doing the check.
        r%Nr�)r2r8)�hasattr�AssertionErrorZdisable_pip_version_checkr%r.�minr8r)r r*r:r#r#r$�handle_pip_version_checkzs
�z*IndexGroupCommand.handle_pip_version_checkN)r;r<r=r>rFr#r#r#r$rArsrAc	@s:eZdZed
dd��Zeddd��Zd	d
�Zddd�ZdS)�RequirementCommandNc	Cs.|j}|dk	st�t||j|||j|j|d�S)zQ
        Create a RequirementPreparer instance for the given parameters.
        N)Z	build_dir�src_dir�download_dir�wheel_download_dir�progress_bar�build_isolation�req_tracker)r6rDr
rHrKrL)Ztemp_build_dirr*rMrIrJZtemp_build_dir_pathr#r#r$�make_requirement_preparer�s�z,RequirementCommand.make_requirement_preparerFT�to-satisfy-onlyc

Cs2tt|j||
d�}t||||||j||||	|d�S)zF
        Create a Resolver instance for the given parameters.
        )�isolated�wheel_cache�
use_pep517)�preparerr:�finder�make_install_req�
use_user_site�ignore_dependencies�ignore_installed�ignore_requires_python�force_reinstall�upgrade_strategy�py_version_info)rr
�
isolated_moderrW)
rSr:rTr*rQrVrXrYrZr[rRr\rUr#r#r$�
make_resolver�s&��z RequirementCommand.make_resolverc	Cs,|jD].}t|d||||d�D]}d|_|�|�qq|D]*}	t|	d|j|j|d�}d|_|�|�q:|jD](}	t|	|j|j|d�}d|_|�|�ql|j	D]0}t||||||jd�D]}d|_|�|�q�q�|j
|_
|�s(|j�s(|j	�s(d|ji}
|j�rt
dt|
d�|j�d	���nt
d
|
��dS)z?
        Marshal cmd line args into a requirement set.
        T)Z
constraintrTr*r:rQN)rPrRrQ)rTr*r:rQrR�namez^You must give at least one requirement to %(name)s (maybe you meant "pip %(name)s %(links)s"?)� )ZlinkszLYou must give at least one requirement to %(name)s (see "pip help %(name)s"))ZconstraintsrZ	is_directZadd_requirementrr]rRZ	editablesrZrequirementsZrequire_hashesr_Z
find_linksr�dictr7)r Zrequirement_set�argsr*rTr:rQ�filenameZ
req_to_addZreqZoptsr#r#r$�populate_requirement_set�sn
�
�
�
�

����z+RequirementCommand.populate_requirement_setcCs4t||d�}td|j|j|j|d�}tj|||d�S)z�
        Create a package finder appropriate to this requirement command.

        :param ignore_requires_python: Whether to ignore incompatible
            "Requires-Python" values in links. Defaults to False.
        )r*T)Zallow_yanked�format_controlZallow_all_prereleases�
prefer_binaryrY)�link_collector�selection_prefs�
target_python)rrreZprerfrZcreate)r r*r:rirYrgrhr#r#r$�_build_package_finders��z(RequirementCommand._build_package_finder)NN)NFTFFrONN)NN)r;r<r=�staticmethodrNr^rdrjr#r#r#r$rG�s$��&G�rG)4r>r5�	functoolsrZpip._internal.cli.base_commandrZ!pip._internal.cli.command_contextrZpip._internal.exceptionsrZpip._internal.indexrZpip._internal.legacy_resolverZ$pip._internal.models.selection_prefsrZpip._internal.network.sessionr	Z pip._internal.operations.preparer
Zpip._internal.req.constructorsrrr
Zpip._internal.req.req_filerZ!pip._internal.self_outdated_checkrrZpip._internal.utils.miscrZpip._internal.utils.typingrZoptparser�typingrrrZpip._internal.cacherZ"pip._internal.models.target_pythonrZpip._internal.req.req_setrZpip._internal.req.req_trackerrZpip._internal.utils.temp_dirrrrArGr#r#r#r$�<module>s4
EPK��[��E��)__pycache__/__init__.cpython-38.opt-1.pycnu�[���U

��.e��@sdZdS)zGSubpackage containing all of pip's command line interface related code
N)�__doc__�rr�>/usr/lib/python3.8/site-packages/pip/_internal/cli/__init__.py�<module>�PK��[�
Cmm'__pycache__/status_codes.cpython-38.pycnu�[���U

��.e��@s(ddlmZdZdZdZdZdZdZdS)�)�absolute_import�����N)Z
__future__r�SUCCESSZERRORZ
UNKNOWN_ERRORZVIRTUALENV_NOT_FOUNDZPREVIOUS_BUILD_DIR_ERRORZNO_MATCHES_FOUND�r	r	�B/usr/lib/python3.8/site-packages/pip/_internal/cli/status_codes.py�<module>sPK��[��m��'__pycache__/base_command.cpython-38.pycnu�[���U

��.eh�@s6dZddlmZmZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddl
mZddlmZmZddlmZmZmZmZmZddlmZmZmZmZmZdd	lmZdd
l m!Z!m"Z"ddl#m$Z$ddl%m&Z&dd
l'm(Z(e&�rddl)m*Z*m+Z+m,Z,ddlm-Z-dgZ.e�/e0�Z1Gdd�de�Z2dS)z(Base Command class, and related routines�)�absolute_import�print_functionN)�
cmdoptions)�CommandContextMixIn)�ConfigOptionParser�UpdatingDefaultsHelpFormatter)�ERROR�PREVIOUS_BUILD_DIR_ERROR�SUCCESS�
UNKNOWN_ERROR�VIRTUALENV_NOT_FOUND)�
BadCommand�CommandError�InstallationError�PreviousBuildDirError�UninstallationError)�
deprecated)�BrokenStdoutLoggingError�
setup_logging)�get_prog)�MYPY_CHECK_RUNNING)�running_under_virtualenv)�List�Tuple�Any)�Values�CommandcsNeZdZdZdZd�fdd�	Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
�ZS)rNFcs�tt|���|jdt�|ft�d||j|d�}||_||_t	f|�|_
d|j��}t�
|j
|�|_t�tj|j
�}|j
�|�dS)Nz%s %sF)�usage�progZ	formatterZadd_help_option�name�description�isolatedz
%s Options)�superr�__init__rrr�__doc__r�summaryr�parser�
capitalize�optparseZOptionGroupZcmd_optsrZmake_option_groupZ
general_groupZadd_option_group)�selfrr%r!Z	parser_kwZ
optgroup_nameZgen_opts��	__class__��B/usr/lib/python3.8/site-packages/pip/_internal/cli/base_command.pyr#4s&�
�zCommand.__init__cCst|d�rt�dS)zf
        This is a no-op so that commands by default do not do the pip version
        check.
        Zno_indexN)�hasattr�AssertionError)r)�optionsr,r,r-�handle_pip_version_checkPsz Command.handle_pip_version_checkcCst�dS�N)�NotImplementedError)r)r0�argsr,r,r-�runZszCommand.runcCs|j�|�Sr2)r&�
parse_args�r)r4r,r,r-r6^szCommand.parse_argsc
Cs>z.|���|�|�W5QR�W�SQRXW5t��XdSr2)�loggingZshutdownZmain_context�_mainr7r,r,r-�maincs
$zCommand.mainc
Cs�|�|�\}}|j|j|_t|j|j|jd�}tjdd�dkrhd}t	�
�dkrZd|}t|ddd�|jrxdt
jd	<|jr�d
�|j�t
jd<|jr�|js�t�s�t�d�t�t��z�z(|�||�}t|t�r�|WW���SW�n�tk
�r2}z.t�t|��tjd
dd�tWY�W��RSd}~XY�n>t t!t"fk
�r�}z.t�t|��tjd
dd�t#WY�W���Sd}~XYn�t$k
�r�}z*t�d|�tjd
dd�t#WY�W��Sd}~XYn�t%k
�rt&dtj'd�|t(j)k�rt*j+tj'd�t#YW�fSt,k
�rDt�d�tjd
dd�t#YW�2St-k
�rntjddd�t.YW�SXW5|�|�Xt/S)N)�	verbosity�no_colorZ
user_log_file�)r=�z�A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-supportZCPythonz�Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. )ZreplacementZgone_in�1ZPIP_NO_INPUT� ZPIP_EXISTS_ACTIONz2Could not find an activated virtualenv (required).zException information:T)�exc_infoz%sz ERROR: Pipe to stdout was broken)�filezOperation cancelled by userz
Exception:)0r6�verbose�quietr;rr<�log�sys�version_info�platformZpython_implementationrZno_input�os�environZ
exists_action�joinZrequire_venv�ignore_require_venvr�loggerZcritical�exitrr1r5�
isinstance�intr�str�debugr	rrr
rrr�print�stderrr8�DEBUG�	traceback�	print_exc�KeyboardInterrupt�
BaseExceptionrr
)r)r4r0Zlevel_number�messageZstatus�excr,r,r-r9ksn���
�

 
z
Command._main)F)�__name__�
__module__�__qualname__rrLr#r1r5r6r:r9�
__classcell__r,r,r*r-r0s
)3r$Z
__future__rrr8Zlogging.configr(rIrHrFrVZpip._internal.clirZ!pip._internal.cli.command_contextrZpip._internal.cli.parserrrZpip._internal.cli.status_codesrr	r
rrZpip._internal.exceptionsr
rrrrZpip._internal.utils.deprecationrZpip._internal.utils.loggingrrZpip._internal.utils.miscrZpip._internal.utils.typingrZpip._internal.utils.virtualenvr�typingrrrr�__all__Z	getLoggerr\rMrr,r,r,r-�<module>s0
PK��[���@,__pycache__/req_command.cpython-38.opt-1.pycnu�[���U

��.ec,�@sXdZddlZddlmZddlmZddlmZddlm	Z	ddl
mZddlm
Z
dd	lmZdd
lmZddlmZddlmZmZmZdd
lmZddlmZmZddlmZddlm Z e �r"ddl!m"Z"ddl#m$Z$m%Z%m&Z&ddl'm(Z(ddl)m*Z*ddl+m,Z,ddl-m.Z.ddl/m0Z0Gdd�de�Z1Gdd�dee1�Z2Gdd�de2�Z3dS)aContains the Command base classes that depend on PipSession.

The classes in this module are in a separate module so the commands not
needing download / PackageFinder capability don't unnecessarily import the
PackageFinder machinery and all its vendored dependencies, etc.
�N)�partial)�Command)�CommandContextMixIn)�CommandError)�
PackageFinder)�Resolver)�SelectionPreferences)�
PipSession)�RequirementPreparer)�install_req_from_editable�install_req_from_line�install_req_from_req_string)�parse_requirements)�make_link_collector�pip_self_version_check)�normalize_path)�MYPY_CHECK_RUNNING)�Values)�List�Optional�Tuple)�
WheelCache)�TargetPython)�RequirementSet)�RequirementTracker)�
TempDirectorycs>eZdZdZ�fdd�Zedd��Zdd�Zdd	d
�Z�Z	S)�SessionCommandMixinzE
    A class mixin for command classes needing _build_session().
    cstt|���d|_dS)N)�superr�__init__�_session)�self��	__class__��A/usr/lib/python3.8/site-packages/pip/_internal/cli/req_command.pyr2szSessionCommandMixin.__init__cCsLg}t|dd�s*t|dd�}|r*|�|�t|dd�}|rD|�|�|pJdS)z7Return a list of index urls from user-provided options.�no_indexFZ	index_urlNZextra_index_urls)�getattr�append�extend)�cls�options�
index_urlsZurlZurlsr#r#r$�_get_index_urls6s

z#SessionCommandMixin._get_index_urlscCs"|jdkr|�|�|��|_|jS)zGet a default-managed session.N)r�
enter_context�_build_session)r r*r#r#r$�get_default_sessionDs
z'SessionCommandMixin.get_default_sessionNcCs�t|jrttj�|jd��nd|dk	r*|n|j|j|�|�d�}|j	rN|j	|_
|jr\|j|_	|jsf|rz|dk	rr|n|j|_|j
r�|j
|j
d�|_|j|j_|S)N�http)�cache�retries�
trusted_hostsr+)r0Zhttps)r	�	cache_dirr�os�path�joinr2r3r,ZcertZverifyZclient_cert�timeout�proxyZproxiesZno_inputZauthZ	prompting)r r*r2r8�sessionr#r#r$r.Ks*��
��z"SessionCommandMixin._build_session)NN)
�__name__�
__module__�__qualname__�__doc__r�classmethodr,r/r.�
__classcell__r#r#r!r$r-s

rc@seZdZdZdd�ZdS)�IndexGroupCommandz�
    Abstract base class for commands with the index_group options.

    This also corresponds to the commands that permit the pip version check.
    c	CsF|js|jrdS|j|dtd|j�d�}|�t||�W5QRXdS)z�
        Do the pip version check if not disabled.

        This overrides the default behavior of not doing the check.
        Nr�)r2r8)Zdisable_pip_version_checkr%r.�minr8r)r r*r:r#r#r$�handle_pip_version_checkzs

�z*IndexGroupCommand.handle_pip_version_checkN)r;r<r=r>rDr#r#r#r$rArsrAc	@s:eZdZed
dd��Zeddd��Zd	d
�Zddd�ZdS)�RequirementCommandNc	Cs"|j}t||j|||j|j|d�S)zQ
        Create a RequirementPreparer instance for the given parameters.
        )Z	build_dir�src_dir�download_dir�wheel_download_dir�progress_bar�build_isolation�req_tracker)r6r
rFrIrJ)Ztemp_build_dirr*rKrGrHZtemp_build_dir_pathr#r#r$�make_requirement_preparer�s�z,RequirementCommand.make_requirement_preparerFT�to-satisfy-onlyc

Cs2tt|j||
d�}t||||||j||||	|d�S)zF
        Create a Resolver instance for the given parameters.
        )�isolated�wheel_cache�
use_pep517)�preparerr:�finder�make_install_req�
use_user_site�ignore_dependencies�ignore_installed�ignore_requires_python�force_reinstall�upgrade_strategy�py_version_info)rr
�
isolated_moderrU)
rQr:rRr*rOrTrVrWrXrYrPrZrSr#r#r$�
make_resolver�s&��z RequirementCommand.make_resolverc	Cs,|jD].}t|d||||d�D]}d|_|�|�qq|D]*}	t|	d|j|j|d�}d|_|�|�q:|jD](}	t|	|j|j|d�}d|_|�|�ql|j	D]0}t||||||jd�D]}d|_|�|�q�q�|j
|_
|�s(|j�s(|j	�s(d|ji}
|j�rt
dt|
d�|j�d	���nt
d
|
��dS)z?
        Marshal cmd line args into a requirement set.
        T)Z
constraintrRr*r:rON)rNrPrO)rRr*r:rOrP�namez^You must give at least one requirement to %(name)s (maybe you meant "pip %(name)s %(links)s"?)� )ZlinkszLYou must give at least one requirement to %(name)s (see "pip help %(name)s"))ZconstraintsrZ	is_directZadd_requirementrr[rPZ	editablesrZrequirementsZrequire_hashesr]Z
find_linksr�dictr7)r Zrequirement_set�argsr*rRr:rO�filenameZ
req_to_addZreqZoptsr#r#r$�populate_requirement_set�sn
�
�
�
�

����z+RequirementCommand.populate_requirement_setcCs4t||d�}td|j|j|j|d�}tj|||d�S)z�
        Create a package finder appropriate to this requirement command.

        :param ignore_requires_python: Whether to ignore incompatible
            "Requires-Python" values in links. Defaults to False.
        )r*T)Zallow_yanked�format_controlZallow_all_prereleases�
prefer_binaryrW)�link_collector�selection_prefs�
target_python)rrrcZprerdrZcreate)r r*r:rgrWrerfr#r#r$�_build_package_finders��z(RequirementCommand._build_package_finder)NN)NFTFFrMNN)NN)r;r<r=�staticmethodrLr\rbrhr#r#r#r$rE�s$��&G�rE)4r>r5�	functoolsrZpip._internal.cli.base_commandrZ!pip._internal.cli.command_contextrZpip._internal.exceptionsrZpip._internal.indexrZpip._internal.legacy_resolverZ$pip._internal.models.selection_prefsrZpip._internal.network.sessionr	Z pip._internal.operations.preparer
Zpip._internal.req.constructorsrrr
Zpip._internal.req.req_filerZ!pip._internal.self_outdated_checkrrZpip._internal.utils.miscrZpip._internal.utils.typingrZoptparser�typingrrrZpip._internal.cacherZ"pip._internal.models.target_pythonrZpip._internal.req.req_setrZpip._internal.req.req_trackerrZpip._internal.utils.temp_dirrrrArEr#r#r#r$�<module>s4
EPK��[G�oo&__pycache__/main_parser.cpython-38.pycnu�[���U

��.e�@s�dZddlZddlZddlmZddlmZmZddlm	Z	m
Z
ddlmZddl
mZmZddlmZer|dd	lmZmZd
dgZdd
�Zd
d�ZdS)z=A single place for constructing and exposing the main parser
�N)�
cmdoptions)�ConfigOptionParser�UpdatingDefaultsHelpFormatter)�
commands_dict�get_similar_commands)�CommandError)�get_pip_version�get_prog)�MYPY_CHECK_RUNNING)�Tuple�List�create_main_parser�
parse_commandcCstddt�dt�d�}tf|�}|��t�|_t�tj|�}|�	|�d|_
dgdd�t��D�}d	�
|�|_|S)
z6Creates and returns the main parser for pip's CLI
    z
%prog <command> [options]F�global)ZusageZadd_help_optionZ	formatter�name�progT�cSsg|]\}}d||jf�qS)z%-27s %s)Zsummary)�.0rZcommand_info�r�A/usr/lib/python3.8/site-packages/pip/_internal/cli/main_parser.py�
<listcomp>2s�z&create_main_parser.<locals>.<listcomp>�
)rr	rZdisable_interspersed_argsr�versionrZmake_option_groupZ
general_groupZadd_option_group�mainr�items�join�description)Z	parser_kw�parserZgen_optsrrrrr
s"�


�cCs�t�}|�|�\}}|jr>tj�|j�tj�tj�t��|rZ|ddkrjt	|�dkrj|�
�t��|d}|tkr�t|�}d|g}|r�|�
d|�td�|���|dd�}|�|�||fS)Nr�help�zunknown command "%s"zmaybe you meant "%s"z - )r
�
parse_argsr�sys�stdout�write�os�linesep�exit�lenZ
print_helprr�appendrr�remove)�argsrZgeneral_optionsZ	args_elseZcmd_nameZguess�msgZcmd_argsrrrr;s&	

)�__doc__r$r!Zpip._internal.clirZpip._internal.cli.parserrrZpip._internal.commandsrrZpip._internal.exceptionsrZpip._internal.utils.miscrr	Zpip._internal.utils.typingr
�typingrr�__all__r
rrrrr�<module>s#PK��[~)(w��-__pycache__/base_command.cpython-38.opt-1.pycnu�[���U

��.eh�@s6dZddlmZmZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddl
mZddlmZmZddlmZmZmZmZmZddlmZmZmZmZmZdd	lmZdd
l m!Z!m"Z"ddl#m$Z$ddl%m&Z&dd
l'm(Z(e&�rddl)m*Z*m+Z+m,Z,ddlm-Z-dgZ.e�/e0�Z1Gdd�de�Z2dS)z(Base Command class, and related routines�)�absolute_import�print_functionN)�
cmdoptions)�CommandContextMixIn)�ConfigOptionParser�UpdatingDefaultsHelpFormatter)�ERROR�PREVIOUS_BUILD_DIR_ERROR�SUCCESS�
UNKNOWN_ERROR�VIRTUALENV_NOT_FOUND)�
BadCommand�CommandError�InstallationError�PreviousBuildDirError�UninstallationError)�
deprecated)�BrokenStdoutLoggingError�
setup_logging)�get_prog)�MYPY_CHECK_RUNNING)�running_under_virtualenv)�List�Tuple�Any)�Values�CommandcsNeZdZdZdZd�fdd�	Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
�ZS)rNFcs�tt|���|jdt�|ft�d||j|d�}||_||_t	f|�|_
d|j��}t�
|j
|�|_t�tj|j
�}|j
�|�dS)Nz%s %sF)�usage�progZ	formatterZadd_help_option�name�description�isolatedz
%s Options)�superr�__init__rrr�__doc__r�summaryr�parser�
capitalize�optparseZOptionGroupZcmd_optsrZmake_option_groupZ
general_groupZadd_option_group)�selfrr%r!Z	parser_kwZ
optgroup_nameZgen_opts��	__class__��B/usr/lib/python3.8/site-packages/pip/_internal/cli/base_command.pyr#4s&�
�zCommand.__init__cCsdS)zf
        This is a no-op so that commands by default do not do the pip version
        check.
        Nr,)r)�optionsr,r,r-�handle_pip_version_checkPsz Command.handle_pip_version_checkcCst�dS�N)�NotImplementedError)r)r.�argsr,r,r-�runZszCommand.runcCs|j�|�Sr0)r&�
parse_args�r)r2r,r,r-r4^szCommand.parse_argsc
Cs>z.|���|�|�W5QR�W�SQRXW5t��XdSr0)�loggingZshutdownZmain_context�_mainr5r,r,r-�maincs
$zCommand.mainc
Cs�|�|�\}}|j|j|_t|j|j|jd�}tjdd�dkrhd}t	�
�dkrZd|}t|ddd�|jrxdt
jd	<|jr�d
�|j�t
jd<|jr�|js�t�s�t�d�t�t��z�z(|�||�}t|t�r�|WW���SW�n�tk
�r2}z.t�t|��tjd
dd�tWY�W��RSd}~XY�n>t t!t"fk
�r�}z.t�t|��tjd
dd�t#WY�W���Sd}~XYn�t$k
�r�}z*t�d|�tjd
dd�t#WY�W��Sd}~XYn�t%k
�rt&dtj'd�|t(j)k�rt*j+tj'd�t#YW�fSt,k
�rDt�d�tjd
dd�t#YW�2St-k
�rntjddd�t.YW�SXW5|�|�Xt/S)N)�	verbosity�no_colorZ
user_log_file�)r;�z�A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-supportZCPythonz�Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. )ZreplacementZgone_in�1ZPIP_NO_INPUT� ZPIP_EXISTS_ACTIONz2Could not find an activated virtualenv (required).zException information:T)�exc_infoz%sz ERROR: Pipe to stdout was broken)�filezOperation cancelled by userz
Exception:)0r4�verbose�quietr9rr:�log�sys�version_info�platformZpython_implementationrZno_input�os�environZ
exists_action�joinZrequire_venv�ignore_require_venvr�loggerZcritical�exitrr/r3�
isinstance�intr�str�debugr	rrr
rrr�print�stderrr6�DEBUG�	traceback�	print_exc�KeyboardInterrupt�
BaseExceptionrr
)r)r2r.Zlevel_number�messageZstatus�excr,r,r-r7ksn���
�

 
z
Command._main)F)�__name__�
__module__�__qualname__rrJr#r/r3r4r8r7�
__classcell__r,r,r*r-r0s
)3r$Z
__future__rrr6Zlogging.configr(rGrFrDrTZpip._internal.clirZ!pip._internal.cli.command_contextrZpip._internal.cli.parserrrZpip._internal.cli.status_codesrr	r
rrZpip._internal.exceptionsr
rrrrZpip._internal.utils.deprecationrZpip._internal.utils.loggingrrZpip._internal.utils.miscrZpip._internal.utils.typingrZpip._internal.utils.virtualenvr�typingrrrr�__all__Z	getLoggerrZrKrr,r,r,r-�<module>s0
PK��[p���##!__pycache__/parser.cpython-38.pycnu�[���U

��.e%�@s�dZddlmZddlZddlZddlZddlZddlmZddl	m
Z
ddlmZddl
mZmZddlmZe�e�ZGd	d
�d
ej�ZGdd�de�ZGd
d�dej�ZGdd�de�Zdd�ZdS)zBase option parser setup�)�absolute_importN)�	strtobool)�string_types)�
UNKNOWN_ERROR)�
Configuration�ConfigurationError)�get_terminal_sizec@sReZdZdZdd�Zdd�Zddd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�ZdS)�PrettyHelpFormatterz4A prettier/less verbose help formatter for optparse.cOs:d|d<d|d<t�dd|d<tjj|f|�|�dS)N�Zmax_help_position�Zindent_incrementr��width)r�optparse�IndentedHelpFormatter�__init__)�self�args�kwargs�r�</usr/lib/python3.8/site-packages/pip/_internal/cli/parser.pyrszPrettyHelpFormatter.__init__cCs|�|dd�S)N� <%s>�, )�_format_option_strings�r�optionrrr�format_option_strings!sz)PrettyHelpFormatter.format_option_stringsrrcCs|g}|jr|�|jd�|jr0|�|jd�t|�dkrH|�d|�|��rr|jp^|j��}|�||���d�	|�S)a
        Return a comma-separated list of option strings and metavars.

        :param option:  tuple of (short opt, long opt), e.g: ('-f', '--format')
        :param mvarfmt: metavar format string - evaluated as mvarfmt % metavar
        :param optsep:  separator
        rr�)
Z_short_opts�appendZ
_long_opts�len�insertZtakes_value�metavar�dest�lower�join)rrZmvarfmtZoptsepZoptsr rrrr$sz*PrettyHelpFormatter._format_option_stringscCs|dkrdS|dS)NZOptionsrz:
r)rZheadingrrr�format_heading;sz"PrettyHelpFormatter.format_headingcCsd|�t�|�d�}|S)zz
        Ensure there is only one newline between usage and the first heading
        if there is no description.
        z
Usage: %s
�  )�indent_lines�textwrap�dedent)rZusage�msgrrr�format_usage@sz PrettyHelpFormatter.format_usagecCsV|rNt|jd�rd}nd}|�d�}|��}|�t�|�d�}d||f}|SdSdS)N�mainZCommandsZDescription�
r%z%s:
%s
r)�hasattr�parser�lstrip�rstripr&r'r()r�descriptionZlabelrrr�format_descriptionHs
z&PrettyHelpFormatter.format_descriptioncCs|r|SdSdS)Nrr)rZepilogrrr�
format_epilogZsz!PrettyHelpFormatter.format_epilogcs"�fdd�|�d�D�}d�|�S)Ncsg|]}�|�qSrr)�.0�line��indentrr�
<listcomp>bsz4PrettyHelpFormatter.indent_lines.<locals>.<listcomp>r,)�splitr#)r�textr7Z	new_linesrr6rr&asz PrettyHelpFormatter.indent_linesN)rr)�__name__�
__module__�__qualname__�__doc__rrrr$r*r2r3r&rrrrr	s
r	c@seZdZdZdd�ZdS)�UpdatingDefaultsHelpFormatterz�Custom help formatter for use in ConfigOptionParser.

    This is updates the defaults before expanding them, allowing
    them to show up correctly in the help listing.
    cCs(|jdk	r|j�|jj�tj�||�S)N)r.�_update_defaults�defaultsrr�expand_defaultrrrrrBms
z,UpdatingDefaultsHelpFormatter.expand_defaultN)r;r<r=r>rBrrrrr?fsr?c@s eZdZdd�Zedd��ZdS)�CustomOptionParsercOs(|j||�}|j��|j�||�|S)z*Insert an OptionGroup at a given position.)Zadd_option_group�
option_groups�popr)r�idxrr�grouprrr�insert_option_groupus
z&CustomOptionParser.insert_option_groupcCs*|jdd�}|jD]}|�|j�q|S)z<Get a list of all options, including those in option groups.N)Zoption_listrD�extend)r�res�irrr�option_list_all~s
z"CustomOptionParser.option_list_allN)r;r<r=rH�propertyrLrrrrrCss	rCc@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�ConfigOptionParserzsCustom option parser which updates its defaults by checking the
    configuration files and environmental variablescOsD|�d�|_|�dd�}t|�|_|js,t�tjj|f|�|�dS)N�name�isolatedF)rErOr�config�AssertionErrorr�OptionParserr)rrrrPrrrr�s


zConfigOptionParser.__init__c
CsNz|�||�WStjk
rH}ztd|�t�d�W5d}~XYnXdS)Nz*An error occurred during configuration: %s�)�check_valuerZOptionValueError�print�sys�exit)rr�key�val�excrrr�
check_default�s
z ConfigOptionParser.check_defaultccs�d|jdg}dd�|D�}|j��D]D\}}|s>t�d|�q$|�dd�\}}||kr$||�||f�q$|D] }||D]\}}||fVqzqndS)N�globalz:env:cSsi|]
}|g�qSrr)r4rOrrr�
<dictcomp>�szGConfigOptionParser._get_ordered_configuration_items.<locals>.<dictcomp>z7Ignoring configuration key '%s' as it's value is empty.�.r)rOrQ�items�logger�debugr9r)rZoverride_orderZ
section_itemsZsection_keyrZZsectionrYrrr� _get_ordered_configuration_items�s�z3ConfigOptionParser._get_ordered_configuration_itemsc	sHt��j��_t�}���D�]\�}��d����dkr>q�jdkr�zt|�}Wn,t	k
r�t
�j�|�}��|�YnXn��jdkr�|��}���fdd�|D�}nh�jdk�r|�
�j����}��||�}�jp�d}�jp�i}�j�||�f|�|�n����|�}||�j<q|D]�t�j��|�<�q&d�_|S)	z�Updates the given defaults with values from the config files and
        the environ. Does a little special handling for certain types of
        options (lists).z--N)�
store_true�store_false�countrcsg|]}����|��qSr)r\)r4�v�rYrrrrr8�sz7ConfigOptionParser._update_defaults.<locals>.<listcomp>�callbackr)r�ValuesrA�values�setrcZ
get_option�actionr�
ValueError�invalid_config_error_message�errorr9�addr!�get_opt_stringZ
convert_valueZ
callback_argsZcallback_kwargsrir\�getattr)rrAZ	late_evalrZZ	error_msg�opt_strrrrrhrr@�s@
�


z#ConfigOptionParser._update_defaultsc
Cs�|jst�|j�Sz|j��Wn2tk
rR}z|�tt	|��W5d}~XYnX|�
|j���}|��D]4}|�
|j�}t|t�rl|��}|�||�||j<qlt�|�S)z�Overriding to make updating the defaults after instantiation of
        the option parser possible, _update_defaults() does the dirty work.N)Zprocess_default_valuesrrjrArQ�loadrrXr�strr@�copyZ_get_all_options�getr!�
isinstancerrrrU)r�errrAr�defaultrtrrr�get_default_values�s"
z%ConfigOptionParser.get_default_valuescCs |�tj�|�td|�dS)Nz%s
)Zprint_usagerW�stderrrXr)rr)rrrrp�szConfigOptionParser.errorN)
r;r<r=r>rr\rcr@r|rprrrrrN�s	1rNcCs |dkrd�||�Sd�||�S)zQReturns a better error message when invalid configuration option
    is provided.)rdrezo{0} is not a valid value for {1} option, please specify a boolean value like yes/no, true/false or 1/0 instead.z[{0} is not a valid value for {1} option, please specify a numerical value like 1/0 instead.)�format)rmrYrZrrrro�s��ro)r>Z
__future__rZloggingrrWr'Zdistutils.utilrZpip._vendor.sixrZpip._internal.cli.status_codesrZpip._internal.configurationrrZpip._internal.utils.compatrZ	getLoggerr;rarr	r?rSrCrNrorrrr�<module>s 
O
wPK��[G�oo,__pycache__/main_parser.cpython-38.opt-1.pycnu�[���U

��.e�@s�dZddlZddlZddlmZddlmZmZddlm	Z	m
Z
ddlmZddl
mZmZddlmZer|dd	lmZmZd
dgZdd
�Zd
d�ZdS)z=A single place for constructing and exposing the main parser
�N)�
cmdoptions)�ConfigOptionParser�UpdatingDefaultsHelpFormatter)�
commands_dict�get_similar_commands)�CommandError)�get_pip_version�get_prog)�MYPY_CHECK_RUNNING)�Tuple�List�create_main_parser�
parse_commandcCstddt�dt�d�}tf|�}|��t�|_t�tj|�}|�	|�d|_
dgdd�t��D�}d	�
|�|_|S)
z6Creates and returns the main parser for pip's CLI
    z
%prog <command> [options]F�global)ZusageZadd_help_optionZ	formatter�name�progT�cSsg|]\}}d||jf�qS)z%-27s %s)Zsummary)�.0rZcommand_info�r�A/usr/lib/python3.8/site-packages/pip/_internal/cli/main_parser.py�
<listcomp>2s�z&create_main_parser.<locals>.<listcomp>�
)rr	rZdisable_interspersed_argsr�versionrZmake_option_groupZ
general_groupZadd_option_group�mainr�items�join�description)Z	parser_kw�parserZgen_optsrrrrr
s"�


�cCs�t�}|�|�\}}|jr>tj�|j�tj�tj�t��|rZ|ddkrjt	|�dkrj|�
�t��|d}|tkr�t|�}d|g}|r�|�
d|�td�|���|dd�}|�|�||fS)Nr�help�zunknown command "%s"zmaybe you meant "%s"z - )r
�
parse_argsr�sys�stdout�write�os�linesep�exit�lenZ
print_helprr�appendrr�remove)�argsrZgeneral_optionsZ	args_elseZcmd_nameZguess�msgZcmd_argsrrrr;s&	

)�__doc__r$r!Zpip._internal.clirZpip._internal.cli.parserrrZpip._internal.commandsrrZpip._internal.exceptionsrZpip._internal.utils.miscrr	Zpip._internal.utils.typingr
�typingrr�__all__r
rrrrr�<module>s#PK��[4��FKFK%__pycache__/cmdoptions.cpython-38.pycnu�[���U

��.e�h�@s�dZddlmZddlZddlZddlZddlmZddlm	Z	ddl
mZmZm
Z
ddlmZddlmZdd	lmZmZdd
lmZddlmZddlmZdd
lmZddlmZddlmZe�rddl m!Z!m"Z"m#Z#m$Z$m%Z%ddl
m&Z&m'Z'ddl(m)Z)e�*e+�Z,dd�Z-dd�Z.d�dd�Z/d�dd�Z0e	edddddd �Z1e	ed!d"d#dd$d%�Z2e	ed&d'd(d#ded%�Z3e	ed)d*d+d,dd-d%�Z4e	ed.d/d#dd0d%�Z5e	ed1d2d3d#d4d �Z6e	ed5d6d7d,dd8d%�Z7e	ed9d:d;e8e�9��d<d=d>�:e�9��d?d@�Z;e	edAdBdCdDdEdFdG�Z<e	edHdId#ded%�Z=e	edJdKdLdMdNdO�Z>e	edPdQdRdSdTdO�Z?e	edUdVdWdXdYdZd[d\�Z@e	ed]d^dLdMedO�ZAd_d`�ZBe	edadbdLdEdcdd�ZCe	ededfdLddEdgdh�ZDe	edidjdkdldmejEdndo�ZFdpdq�ZGe	edrdsd#ddtd%�ZHdudv�ZIdwdx�ZJdydz�ZKd{d|�ZLd}d~�ZMe	edd�d�d�d�d�e�d�do�	ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSe	ed�d�d�dd�do�ZTd�d��ZUd�d��ZVe	ed�d�d�d�eVdLded��d��	ZWe	ed�d�d�dd�do�ZXe	ed�d�d�dd�do�ZYd�d��ZZd�d��Z[d�d��Z\e	ed�d�ed�d�d��Z]d�d��Z^e	ed�d�d�e^d�d��Z_e	ed�d�d�d#dd�d%�Z`e	ed�d�d�d�d�d�d�dG�Zae	ed�d�d#d�d �Zbe	ed�d�d�d�d�d%�Zcd�dĄZde	ed�d�d#dd�d%�Zee	ed�d�d�eddedɍZfe	ed�d�d�d�d�dύZge	ed�d�d�d�d�dύZhe	ed�d#dd�dՍZie	ed�d#dd�dՍZje	ed�d�d#dd�d%�Zke	ed�d�d�d#ed �Zld�d߄Zme	ed�d�d�emd�d�d�Zne	ed�d�d#dd�d%�Zoe	ed�dEd�d�d �Zpd�d�Zqd�e1e2e3e4e6e7e<e=e>e?e@eAeBeJeCeDe]e_eke5gd�Zrd�eFeGeHeIgd�ZsdS)�aC
shared options and groups

The principle here is to define options once, but *not* instantiate them
globally. One reason being that options with action='append' can carry state
between parses. pip parses general options twice internally, and shouldn't
pass on state. To be consistent, all options will follow this design.
�)�absolute_importN)�	strtobool)�partial)�
SUPPRESS_HELP�Option�OptionGroup)�dedent)�CommandError)�USER_CACHE_DIR�get_src_prefix)�
FormatControl)�PyPI)�TargetPython)�
STRONG_HASHES)�MYPY_CHECK_RUNNING)�	BAR_TYPES)�Any�Callable�Dict�Optional�Tuple)�OptionParser�Values)�ConfigOptionParsercCs.d�||�}t�d�|����}|�|�dS)z�
    Raise an option parsing error using parser.error().

    Args:
      parser: an OptionParser instance.
      option: an Option instance.
      msg: the error text.
    z{} error: {}� N)�format�textwrapZfill�join�split�error)�parser�option�msg�r#�@/usr/lib/python3.8/site-packages/pip/_internal/cli/cmdoptions.py�raise_option_error)s	r%cCs,t||d�}|dD]}|�|��q|S)z�
    Return an OptionGroup object
    group  -- assumed to be dict with 'name' and 'options' keys
    parser -- an optparse Parser
    �name�options)r�
add_option)�groupr Zoption_groupr!r#r#r$�make_option_group7sr*csP�dkr|��fdd�}dddg}tt||��rL|j}|��tjddd	�dS)
z�Disable wheels if per-setup.py call options are set.

    :param options: The OptionParser options to update.
    :param check_options: The options to check, if not supplied defaults to
        options.
    Ncst�|d�S�N)�getattr)�n��
check_optionsr#r$�getnameOsz+check_install_build_global.<locals>.getnameZ
build_options�global_options�install_optionszeDisabling all use of wheels due to the use of --build-options / --global-options / --install-options.�)�
stacklevel)�any�map�format_controlZdisallow_binaries�warnings�warn)r'r/r0�namesZcontrolr#r.r$�check_install_build_globalDs
�r;FcCsbt|j|j|j|jg�}tt�dh�}|j|ko6|j}|rH|rHt	d��|r^|r^|j
s^t	d��dS)z�Function for determining if custom platform options are allowed.

    :param options: The OptionParser options.
    :param check_target: Whether or not to check if --target is being used.
    z:all:z�When restricting platform and interpreter constraints using --python-version, --platform, --abi, or --implementation, either --no-deps must be set, or --only-binary=:all: must be set and --no-binary must not be set (or must be set to :none:).zQCan not use any platform or abi specific options unless installing via '--target'N)r5�python_version�platform�abi�implementationr�setr7�ignore_dependenciesr	Z
target_dir)r'Zcheck_targetZdist_restriction_setZbinary_onlyZsdist_dependencies_allowedr#r#r$�check_dist_restriction[s&�
��
�rBz-hz--help�helpz
Show help.)�dest�actionrCz
--isolated�
isolated_mode�
store_truezSRun pip in an isolated mode, ignoring environment variables and user configuration.�rDrE�defaultrCz--require-virtualenvz--require-venvZrequire_venvz-vz	--verbose�verbose�countzDGive more output. Option is additive, and can be used up to 3 times.z
--no-color�no_colorzSuppress colored outputz-Vz	--version�versionzShow version and exit.z-qz--quiet�quietz�Give less output. Option is additive, and can be used up to 3 times (corresponding to WARNING, ERROR, and CRITICAL logging levels).z--progress-bar�progress_bar�choiceZonz*Specify type of progress to be displayed [�|z] (default: %default))rD�type�choicesrIrCz--logz
--log-filez--local-log�log�pathz Path to a verbose appending log.)rD�metavarrCz
--no-input�no_inputz--proxy�proxy�str�z<Specify a proxy in the form [user:passwd@]proxy.server:port.)rDrRrIrCz	--retries�retries�int�zRMaximum number of retries each connection should attempt (default %default times).z	--timeoutz--default-timeoutZsec�timeout�float�z2Set the socket timeout (default %default seconds).)rVrDrRrIrCz--skip-requirements-regex�skip_requirements_regexc
Cs"tddddddddggd	d
dd�S)
Nz--exists-action�
exists_actionrP�s�i�w�b�a�appendrEzYDefault action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort.)rDrRrSrIrErVrC�rr#r#r#r$rbs�rbz--cert�certzPath to alternate CA bundle.)rDrRrVrCz
--client-cert�client_certzkPath to SSL client certificate, a single file containing the private key and the certificate in PEM format.)rDrRrIrVrCz-iz--index-urlz
--pypi-url�	index_url�URLz�Base URL of the Python Package Index (default %default). This should point to a repository compliant with PEP 503 (the simple repository API) or a local directory laid out in the same format.)rDrVrIrCcCstddddgdd�S)Nz--extra-index-urlZextra_index_urlsrmrhzmExtra URLs of package indexes to use in addition to --index-url. Should follow the same rules as --index-url.)rDrVrErIrCrir#r#r#r$�extra_index_urlDs�rnz
--no-index�no_indexzAIgnore package index (only looking at --find-links URLs instead).c	Cstddddgddd�S)Nz-fz--find-links�
find_linksrhZurlz�If a url or path to an html file, then parse for links to archives. If a local path or file:// url that's a directory, then look for archives in the directory listing.�rDrErIrVrCrir#r#r#r$rp[s�rpcCstddddgdd�S)Nz--trusted-hostZ
trusted_hostsrhZHOSTNAMEz]Mark this host or host:port pair as trusted, even though it does not have valid or any HTTPS.)rDrErVrIrCrir#r#r#r$�trusted_hostis�rrc	Cstddddgddd�S)Nz-cz--constraint�constraintsrh�filez\Constrain versions using the given constraints file. This option can be used multiple times.rqrir#r#r#r$rsvs�rsc	Cstddddgddd�S)Nz-rz
--requirement�requirementsrhrtzQInstall from the given requirements file. This option can be used multiple times.rqrir#r#r#r$ru�s�ruc	Cstddddgddd�S)Nz-ez
--editableZ	editablesrhzpath/urlzkInstall a project in editable mode (i.e. setuptools "develop mode") from a local project path or a VCS url.rqrir#r#r#r$�editable�s�rvz--srcz--sourcez--source-dirz--source-directoryZsrc_dir�dirz�Directory to check out editable projects into. The default in a virtualenv is "<venv path>/src". The default for global installs is "<current dir>/src".cCst||j�S)zGet a format_control object.)r,rD)�valuesr!r#r#r$�_get_format_control�srycCs"t|j|�}t�||j|j�dSr+)ryrxr�handle_mutual_excludes�	no_binary�only_binary�r!�opt_str�valuer Zexistingr#r#r$�_handle_no_binary�s�r�cCs"t|j|�}t�||j|j�dSr+)ryrxrrzr|r{r}r#r#r$�_handle_only_binary�s�r�c	Cs$tt�t��}tdddtd|dd�S)Nz--no-binaryr7�callbackrYa^Do not use binary packages. Can be supplied multiple times, and each time adds to the existing value. Accepts either :all: to disable all binary packages, :none: to empty the set, or one or more package names with commas between them (no colons). Note that some packages are tricky to compile and may fail to install when this option is used on them.�rDrEr�rRrIrC)rr@rr��r7r#r#r$r{�s�r{c	Cs$tt�t��}tdddtd|dd�S)Nz
--only-binaryr7r�rYaGDo not use source packages. Can be supplied multiple times, and each time adds to the existing value. Accepts either :all: to disable all source packages, :none: to empty the set, or one or more package names with commas between them. Packages without binary distributions will fail to install when this option is used on them.r�)rr@rr�r�r#r#r$r|�s�r|z
--platformr=z[Only use wheels compatible with <platform>. Defaults to the platform of the running system.cCs�|sdS|�d�}t|�dkr"dSt|�dkrV|d}t|�dkrV|d|dd�g}ztdd	�|D��}Wntk
r�Yd
SX|dfS)z�
    Convert a version string like "3", "37", or "3.7.3" into a tuple of ints.

    :return: A 2-tuple (version_info, error_msg), where `error_msg` is
        non-None if and only if there was a parsing error.
    )NN�.�)r#z'at most three version parts are allowed�rNcss|]}t|�VqdSr+)r\)�.0�partr#r#r$�	<genexpr>sz*_convert_python_version.<locals>.<genexpr>)r#z$each version part must be an integer)r�len�tuple�
ValueError)r�parts�version_infor#r#r$�_convert_python_version�s
r�cCs:t|�\}}|dk	r.d�||�}t|||d�||j_dS)z3
    Handle a provided --python-version value.
    Nz(invalid --python-version value: {!r}: {}�r!r")r�rr%rxr<)r!r~rr r�Z	error_msgr"r#r#r$�_handle_python_version	s��r�z--python-versionr<r�a�    The Python interpreter version to use for wheel and "Requires-Python"
    compatibility checks. Defaults to a version derived from the running
    interpreter. The version can be specified using up to three dot-separated
    integers (e.g. "3" for 3.0.0, "3.7" for 3.7.0, or "3.7.3"). A major-minor
    version can also be given as a string without dots (e.g. "37" for 3.7.0).
    )rDrVrEr�rRrIrCz--implementationr?z�Only use wheels compatible with Python implementation <implementation>, e.g. 'pp', 'jy', 'cp',  or 'ip'. If not specified, then the current interpreter implementation is used.  Use 'py' to force implementation-agnostic wheels.z--abir>z�Only use wheels compatible with Python abi <abi>, e.g. 'pypy_41'.  If not specified, then the current interpreter abi tag is used.  Generally you will need to specify --implementation, --platform, and --python-version when using this option.cCs4|�t��|�t��|�t��|�t��dSr+)r(r=r<r?r>)Zcmd_optsr#r#r$�add_target_python_optionsIsr�cCst|j|j|j|jd�}|S)N)r=Zpy_version_infor>r?)rr=r<r>r?)r'Z
target_pythonr#r#r$�make_target_pythonQs�r�cCstdddddd�S)Nz--prefer-binary�
prefer_binaryrGFz8Prefer older binary packages over newer source packages.rHrir#r#r#r$r�]s�r�z--cache-dir�	cache_dirzStore the cache data in <dir>.)rDrIrVrCc
CsV|dk	rJzt|�Wn4tk
rH}zt||t|�d�W5d}~XYnXd|j_dS)z�
    Process a value provided for the --no-cache-dir option.

    This is an optparse.Option callback for the --no-cache-dir option.
    Nr�F)rr�r%rYrxr�)r!�optrr �excr#r#r$�_handle_no_cache_dirrs$	r�z--no-cache-dirzDisable the cache.)rDrEr�rCz	--no-depsz--no-dependenciesrAz#Don't install package dependencies.z-bz--buildz--build-dirz--build-directory�	build_dira>Directory to unpack packages into and build in. Note that an initial build still takes place in a temporary directory. The location of temporary directories can be controlled by setting the TMPDIR environment variable (TEMP on Windows) appropriately. When passed, build directories are not cleaned in case of failures.z--ignore-requires-python�ignore_requires_pythonz'Ignore the Requires-Python information.z--no-build-isolationZbuild_isolationZstore_falseTz�Disable isolation when building a modern source distribution. Build dependencies specified by PEP 518 must be already installed if this option is used.cCs&|dk	rd}t|||d�d|j_dS)z�
    Process a value provided for the --no-use-pep517 option.

    This is an optparse.Option callback for the no_use_pep517 option.
    Na0A value was passed for --no-use-pep517,
        probably using either the PIP_NO_USE_PEP517 environment variable
        or the "no-use-pep517" config file option. Use an appropriate value
        of the PIP_USE_PEP517 environment variable or the "use-pep517"
        config file option instead.
        r�F)r%rx�
use_pep517)r!r�rr r"r#r#r$�_handle_no_use_pep517�sr�z--use-pep517r�z^Use PEP 517 for building source distributions (use --no-use-pep517 to force legacy behaviour).z--no-use-pep517)rDrEr�rIrCz--install-optionr2rhr'a"Extra arguments to be supplied to the setup.py install command (use like --install-option="--install-scripts=/usr/local/bin"). Use multiple --install-option options to pass multiple options to setup.py install. If you are using an option with a directory path, be sure to use absolute path.)rDrErVrCz--global-optionr1zTExtra global options to be supplied to the setup.py call before the install command.z
--no-cleanz!Don't clean up build directories.)rErIrCz--prezYInclude pre-release and development versions. By default, pip only finds stable versions.z--disable-pip-version-check�disable_pip_version_checkz{Don't periodically check PyPI to determine whether a new version of pip is available for download. Implied with --no-index.z-Zz--always-unzip�always_unzipcCs�|jjsi|j_z|�dd�\}}Wn"tk
rF|�d|�YnX|tkrh|�d|d�t�f�|jj�|g��|�dS)zkGiven a value spelled "algo:digest", append the digest to a list
    pointed to in a dict by the algo name.�:r�zTArguments to %s must be a hash name followed by a value, like --hash=sha256:abcde...z&Allowed hash algorithms for %s are %s.z, N)	rx�hashesrr�rrr�
setdefaultrh)r!r~rr ZalgoZdigestr#r#r$�_handle_merge_hash)s��r�z--hashr��stringzgVerify that the package's archive matches this hash before installing. Example: --hash=sha256:abcdef...)rDrEr�rRrCz--require-hashes�require_hashesz�Require a hash to check each requirement against, for repeatable installs. This option is implied when any package in a requirements file has a --hash option.z--pathz^Restrict to the specified installation path for listing packages (can be used multiple times).cCs|jr|js|jrtd��dS)Nz2Cannot combine '--path' with '--user' or '--local')rU�userZlocalr	)r'r#r#r$�check_list_path_option_s�r�zGeneral Options)r&r'zPackage Index Options)N)F)t�__doc__Z
__future__rZloggingrr8Zdistutils.utilr�	functoolsrZoptparserrrrZpip._internal.exceptionsr	Zpip._internal.locationsr
rZ#pip._internal.models.format_controlrZpip._internal.models.indexr
Z"pip._internal.models.target_pythonrZpip._internal.utils.hashesrZpip._internal.utils.typingrZpip._internal.utils.uir�typingrrrrrrrZpip._internal.cli.parserrZ	getLogger�__name__Zloggerr%r*r;rBZhelp_rFZrequire_virtualenvrJrLrMrN�list�keysrrOrTrWrXr[r^rarbrjrkZ
simple_urlrlrnrorprrrsrurv�srcryr�r�r{r|r=r�r�r<r?r>r�r�r�r�r�Zno_cacheZno_depsr�r�Zno_build_isolationr�r�Z
no_use_pep517r2r1Zno_cleanZprer�r�r��hashr�Z	list_pathr�Z
general_groupZindex_groupr#r#r#r$�<module>sB



,���
�	�	��

���
��
�	�
�
��	��

�




������
�	�	����
�
�
�
��	��	���

����PK��[�qq/__pycache__/autocompletion.cpython-38.opt-1.pycnu�[���U

��.e�@s`dZddlZddlZddlZddlmZddlmZmZddl	m
Z
dd�Zdd	�Zd
d�Z
dS)zBLogic that powers autocompletion installed by ``pip completion``.
�N)�create_main_parser)�
commands_dict�create_command)�get_installed_distributionscs�dtjkrdStjd��dd�}ttjd�}z||d�Wntk
rZd�YnXtt��g}z�fdd�|D�d	}Wntk
r�d}YnXt�}|�r:|d
kr�t�	d�|dkö�
d�}|�r>g}���}td
d�D].}|j
�
|�r�|j
|dd�kr�|�|j
�q�|�r>|D]}t|��q$t�	d�t|�}	|	jjD]8}
|
jtjk�rN|
j|
jD]}|�||
jf��ql�qNdd�|d|d�D���fdd�|D�}�fdd�|D�}t|||	jj�}|�r�t�|�}dd�|D�}|D]>}
|
d	}|
d�r,|
d	dd�dk�r,|d7}t|��q�n�dd�|jD�}|�|j�dd�|D�}��
d��r�|D]$}
|
jtjk�rt�|
j|
j7��qtnt|||�}|�r�t�|��td��fdd��D���t�	d�dS)z?Entry Point for completion of main and subcommand options.
    ZPIP_AUTO_COMPLETENZ
COMP_WORDS�Z
COMP_CWORD�csg|]}|�kr|�qS�r)�.0�w)�subcommandsr�D/usr/lib/python3.8/site-packages/pip/_internal/cli/autocompletion.py�
<listcomp>!sz autocomplete.<locals>.<listcomp>r�help)ZshowZ	uninstall�-T)Z
local_onlycSsg|]}|�d�d�qS)�=r)�split�r	�xrrrr
Dscs g|]\}}|�kr||f�qSrr)r	r�v)�	prev_optsrrr
Escs"g|]\}}|���r||f�qSr��
startswith)r	�kr��currentrrr
Gs
css|]}|dfVqdS)rNr)r	�optrrr�	<genexpr>Pszautocomplete.<locals>.<genexpr>�z--rcSsg|]
}|j�qSr)�option_list)r	�irrrr
Zscss|]}|D]
}|Vq
qdS�Nr)r	�it�orrrr\s� csg|]}|���r|�qSrrrrrrr
gs
)�os�environr�int�
IndexError�listrr�sys�exitr�lowerr�key�append�printr�parserZoption_list_allr�optparse�
SUPPRESS_HELPZ
_long_optsZ_short_opts�nargs�get_path_completion_type�auto_complete_pathsZ
option_groupsr�join)�cwords�cwordZoptionsZsubcommand_namer/Zshould_list_installedZ	installedZlcZdistZ
subcommandrZopt_str�completion_typeZoptionZ	opt_label�optsr)rrrr�autocompletes�




�
�
 
r:cCs�|dks||d�d�sdS|D]n}|jtjkr4q"t|��d�D]L}||d�d�d|krB|jr�tdd�|j�d�D��rB|jSqBq"dS)	aLGet the type of path completion (``file``, ``dir``, ``path`` or None)

    :param cwords: same as the environmental variable ``COMP_WORDS``
    :param cword: same as the environmental variable ``COMP_CWORD``
    :param opts: The available options to check
    :return: path completion type (``file``, ``dir``, ``path`` or None)
    rrN�/rrcss|]}|dkVqdS))�path�file�dirNrrrrrrzs�z+get_path_completion_type.<locals>.<genexpr>)rrr0r1�strr�metavar�any)r6r7r9rr"rrrr3ks
�r3c#s�tj�|�\}�tj�|�}t�|tj�s.dStj�����fdd�t�|�D�}|D]`}tj�||�}tj�tj�||��}|dkr�tj�	|�r�|VqVtj�
|�rVtj�|d�VqVdS)aoIf ``completion_type`` is ``file`` or ``path``, list all regular files
    and directories starting with ``current``; otherwise only list directories
    starting with ``current``.

    :param current: The word to be completed
    :param completion_type: path completion type(`file`, `path` or `dir`)i
    :return: A generator of regular files and/or directories
    Nc3s$|]}tj�|����r|VqdSr )r$r<�normcaserr��filenamerrr�s�z&auto_complete_paths.<locals>.<genexpr>r>r)r$r<r�abspath�access�R_OKrB�listdirr5�isfile�isdir)rr8Z	directoryZcurrent_pathZ	file_list�frZ	comp_filerrCrr4�s	r4)�__doc__r0r$r)Zpip._internal.cli.main_parserrZpip._internal.commandsrrZpip._internal.utils.miscrr:r3r4rrrr�<module>s[PK��[�
Cmm-__pycache__/status_codes.cpython-38.opt-1.pycnu�[���U

��.e��@s(ddlmZdZdZdZdZdZdZdS)�)�absolute_import�����N)Z
__future__r�SUCCESSZERRORZ
UNKNOWN_ERRORZVIRTUALENV_NOT_FOUNDZPREVIOUS_BUILD_DIR_ERRORZNO_MATCHES_FOUND�r	r	�B/usr/lib/python3.8/site-packages/pip/_internal/cli/status_codes.py�<module>sPK��[�4��++0__pycache__/command_context.cpython-38.opt-1.pycnu�[���U

��.e�@s,ddlmZddlmZGdd�de�ZdS)�)�contextmanager)�	ExitStackcs0eZdZ�fdd�Zedd��Zdd�Z�ZS)�CommandContextMixIncs tt|���d|_t�|_dS)NF)�superr�__init__�_in_main_contextr�
_main_context��self��	__class__��E/usr/lib/python3.8/site-packages/pip/_internal/cli/command_context.pyr
szCommandContextMixIn.__init__c	cs0d|_z|j�dVW5QRXW5d|_XdS)NTF)rrr	r
r
r�main_contexts
z CommandContextMixIn.main_contextcCs|j�|�S)N)r�
enter_context)r
Zcontext_providerr
r
rrsz!CommandContextMixIn.enter_context)�__name__�
__module__�__qualname__rrrr�
__classcell__r
r
rrr	s

rN)�
contextlibrZpip._vendor.contextlib2r�objectrr
r
r
r�<module>sPK��[�j~�"�"'__pycache__/parser.cpython-38.opt-1.pycnu�[���U

��.e%�@s�dZddlmZddlZddlZddlZddlZddlmZddl	m
Z
ddlmZddl
mZmZddlmZe�e�ZGd	d
�d
ej�ZGdd�de�ZGd
d�dej�ZGdd�de�Zdd�ZdS)zBase option parser setup�)�absolute_importN)�	strtobool)�string_types)�
UNKNOWN_ERROR)�
Configuration�ConfigurationError)�get_terminal_sizec@sReZdZdZdd�Zdd�Zddd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�ZdS)�PrettyHelpFormatterz4A prettier/less verbose help formatter for optparse.cOs:d|d<d|d<t�dd|d<tjj|f|�|�dS)N�Zmax_help_position�Zindent_incrementr��width)r�optparse�IndentedHelpFormatter�__init__)�self�args�kwargs�r�</usr/lib/python3.8/site-packages/pip/_internal/cli/parser.pyrszPrettyHelpFormatter.__init__cCs|�|dd�S)N� <%s>�, )�_format_option_strings�r�optionrrr�format_option_strings!sz)PrettyHelpFormatter.format_option_stringsrrcCs|g}|jr|�|jd�|jr0|�|jd�t|�dkrH|�d|�|��rr|jp^|j��}|�||���d�	|�S)a
        Return a comma-separated list of option strings and metavars.

        :param option:  tuple of (short opt, long opt), e.g: ('-f', '--format')
        :param mvarfmt: metavar format string - evaluated as mvarfmt % metavar
        :param optsep:  separator
        rr�)
Z_short_opts�appendZ
_long_opts�len�insertZtakes_value�metavar�dest�lower�join)rrZmvarfmtZoptsepZoptsr rrrr$sz*PrettyHelpFormatter._format_option_stringscCs|dkrdS|dS)NZOptionsrz:
r)rZheadingrrr�format_heading;sz"PrettyHelpFormatter.format_headingcCsd|�t�|�d�}|S)zz
        Ensure there is only one newline between usage and the first heading
        if there is no description.
        z
Usage: %s
�  )�indent_lines�textwrap�dedent)rZusage�msgrrr�format_usage@sz PrettyHelpFormatter.format_usagecCsV|rNt|jd�rd}nd}|�d�}|��}|�t�|�d�}d||f}|SdSdS)N�mainZCommandsZDescription�
r%z%s:
%s
r)�hasattr�parser�lstrip�rstripr&r'r()r�descriptionZlabelrrr�format_descriptionHs
z&PrettyHelpFormatter.format_descriptioncCs|r|SdSdS)Nrr)rZepilogrrr�
format_epilogZsz!PrettyHelpFormatter.format_epilogcs"�fdd�|�d�D�}d�|�S)Ncsg|]}�|�qSrr)�.0�line��indentrr�
<listcomp>bsz4PrettyHelpFormatter.indent_lines.<locals>.<listcomp>r,)�splitr#)r�textr7Z	new_linesrr6rr&asz PrettyHelpFormatter.indent_linesN)rr)�__name__�
__module__�__qualname__�__doc__rrrr$r*r2r3r&rrrrr	s
r	c@seZdZdZdd�ZdS)�UpdatingDefaultsHelpFormatterz�Custom help formatter for use in ConfigOptionParser.

    This is updates the defaults before expanding them, allowing
    them to show up correctly in the help listing.
    cCs(|jdk	r|j�|jj�tj�||�S)N)r.�_update_defaults�defaultsrr�expand_defaultrrrrrBms
z,UpdatingDefaultsHelpFormatter.expand_defaultN)r;r<r=r>rBrrrrr?fsr?c@s eZdZdd�Zedd��ZdS)�CustomOptionParsercOs(|j||�}|j��|j�||�|S)z*Insert an OptionGroup at a given position.)Zadd_option_group�
option_groups�popr)r�idxrr�grouprrr�insert_option_groupus
z&CustomOptionParser.insert_option_groupcCs*|jdd�}|jD]}|�|j�q|S)z<Get a list of all options, including those in option groups.N)Zoption_listrD�extend)r�res�irrr�option_list_all~s
z"CustomOptionParser.option_list_allN)r;r<r=rH�propertyrLrrrrrCss	rCc@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�ConfigOptionParserzsCustom option parser which updates its defaults by checking the
    configuration files and environmental variablescOs:|�d�|_|�dd�}t|�|_tjj|f|�|�dS)N�name�isolatedF)rErOr�configr�OptionParserr)rrrrPrrrr�s
zConfigOptionParser.__init__c
CsNz|�||�WStjk
rH}ztd|�t�d�W5d}~XYnXdS)Nz*An error occurred during configuration: %s�)�check_valuerZOptionValueError�print�sys�exit)rr�key�val�excrrr�
check_default�s
z ConfigOptionParser.check_defaultccs�d|jdg}dd�|D�}|j��D]D\}}|s>t�d|�q$|�dd�\}}||kr$||�||f�q$|D] }||D]\}}||fVqzqndS)N�globalz:env:cSsi|]
}|g�qSrr)r4rOrrr�
<dictcomp>�szGConfigOptionParser._get_ordered_configuration_items.<locals>.<dictcomp>z7Ignoring configuration key '%s' as it's value is empty.�.r)rOrQ�items�logger�debugr9r)rZoverride_orderZ
section_itemsZsection_keyrYZsectionrXrrr� _get_ordered_configuration_items�s�z3ConfigOptionParser._get_ordered_configuration_itemsc	sHt��j��_t�}���D�]\�}��d����dkr>q�jdkr�zt|�}Wn,t	k
r�t
�j�|�}��|�YnXn��jdkr�|��}���fdd�|D�}nh�jdk�r|�
�j����}��||�}�jp�d}�jp�i}�j�||�f|�|�n����|�}||�j<q|D]�t�j��|�<�q&d�_|S)	z�Updates the given defaults with values from the config files and
        the environ. Does a little special handling for certain types of
        options (lists).z--N)�
store_true�store_false�countrcsg|]}����|��qSr)r[)r4�v�rXrrrrr8�sz7ConfigOptionParser._update_defaults.<locals>.<listcomp>�callbackr)r�ValuesrA�values�setrbZ
get_option�actionr�
ValueError�invalid_config_error_message�errorr9�addr!�get_opt_stringZ
convert_valueZ
callback_argsZcallback_kwargsrhr[�getattr)rrAZ	late_evalrYZ	error_msg�opt_strrrrrgrr@�s@
�


z#ConfigOptionParser._update_defaultsc
Cs�|jst�|j�Sz|j��Wn2tk
rR}z|�tt	|��W5d}~XYnX|�
|j���}|��D]4}|�
|j�}t|t�rl|��}|�||�||j<qlt�|�S)z�Overriding to make updating the defaults after instantiation of
        the option parser possible, _update_defaults() does the dirty work.N)Zprocess_default_valuesrrirArQ�loadrrWr�strr@�copyZ_get_all_options�getr!�
isinstancerrqrT)r�errrAr�defaultrsrrr�get_default_values�s"
z%ConfigOptionParser.get_default_valuescCs |�tj�|�td|�dS)Nz%s
)Zprint_usagerV�stderrrWr)rr)rrrro�szConfigOptionParser.errorN)
r;r<r=r>rr[rbr@r{rorrrrrN�s	1rNcCs |dkrd�||�Sd�||�S)zQReturns a better error message when invalid configuration option
    is provided.)rcrdzo{0} is not a valid value for {1} option, please specify a boolean value like yes/no, true/false or 1/0 instead.z[{0} is not a valid value for {1} option, please specify a numerical value like 1/0 instead.)�format)rlrXrYrrrrn�s��rn)r>Z
__future__rZloggingrrVr'Zdistutils.utilrZpip._vendor.sixrZpip._internal.cli.status_codesrZpip._internal.configurationrrZpip._internal.utils.compatrZ	getLoggerr;r`rr	r?rRrCrNrnrrrr�<module>s 
O
wPK��[��E��#__pycache__/__init__.cpython-38.pycnu�[���U

��.e��@sdZdS)zGSubpackage containing all of pip's command line interface related code
N)�__doc__�rr�>/usr/lib/python3.8/site-packages/pip/_internal/cli/__init__.py�<module>�PK��[��s1command_context.pynu�[���# The following comment should be removed at some point in the future.
# mypy: disallow-untyped-defs=False

from contextlib import contextmanager

from pip._vendor.contextlib2 import ExitStack


class CommandContextMixIn(object):
    def __init__(self):
        super(CommandContextMixIn, self).__init__()
        self._in_main_context = False
        self._main_context = ExitStack()

    @contextmanager
    def main_context(self):
        assert not self._in_main_context

        self._in_main_context = True
        try:
            with self._main_context:
                yield
        finally:
            self._in_main_context = False

    def enter_context(self, context_provider):
        assert self._in_main_context

        return self._main_context.enter_context(context_provider)
PK��[�$�/hhbase_command.pynu�[���"""Base Command class, and related routines"""

from __future__ import absolute_import, print_function

import logging
import logging.config
import optparse
import os
import platform
import sys
import traceback

from pip._internal.cli import cmdoptions
from pip._internal.cli.command_context import CommandContextMixIn
from pip._internal.cli.parser import (
    ConfigOptionParser,
    UpdatingDefaultsHelpFormatter,
)
from pip._internal.cli.status_codes import (
    ERROR,
    PREVIOUS_BUILD_DIR_ERROR,
    SUCCESS,
    UNKNOWN_ERROR,
    VIRTUALENV_NOT_FOUND,
)
from pip._internal.exceptions import (
    BadCommand,
    CommandError,
    InstallationError,
    PreviousBuildDirError,
    UninstallationError,
)
from pip._internal.utils.deprecation import deprecated
from pip._internal.utils.logging import BrokenStdoutLoggingError, setup_logging
from pip._internal.utils.misc import get_prog
from pip._internal.utils.typing import MYPY_CHECK_RUNNING
from pip._internal.utils.virtualenv import running_under_virtualenv

if MYPY_CHECK_RUNNING:
    from typing import List, Tuple, Any
    from optparse import Values

__all__ = ['Command']

logger = logging.getLogger(__name__)


class Command(CommandContextMixIn):
    usage = None  # type: str
    ignore_require_venv = False  # type: bool

    def __init__(self, name, summary, isolated=False):
        # type: (str, str, bool) -> None
        super(Command, self).__init__()
        parser_kw = {
            'usage': self.usage,
            'prog': '%s %s' % (get_prog(), name),
            'formatter': UpdatingDefaultsHelpFormatter(),
            'add_help_option': False,
            'name': name,
            'description': self.__doc__,
            'isolated': isolated,
        }

        self.name = name
        self.summary = summary
        self.parser = ConfigOptionParser(**parser_kw)

        # Commands should add options to this option group
        optgroup_name = '%s Options' % self.name.capitalize()
        self.cmd_opts = optparse.OptionGroup(self.parser, optgroup_name)

        # Add the general options
        gen_opts = cmdoptions.make_option_group(
            cmdoptions.general_group,
            self.parser,
        )
        self.parser.add_option_group(gen_opts)

    def handle_pip_version_check(self, options):
        # type: (Values) -> None
        """
        This is a no-op so that commands by default do not do the pip version
        check.
        """
        # Make sure we do the pip version check if the index_group options
        # are present.
        assert not hasattr(options, 'no_index')

    def run(self, options, args):
        # type: (Values, List[Any]) -> Any
        raise NotImplementedError

    def parse_args(self, args):
        # type: (List[str]) -> Tuple
        # factored out for testability
        return self.parser.parse_args(args)

    def main(self, args):
        # type: (List[str]) -> int
        try:
            with self.main_context():
                return self._main(args)
        finally:
            logging.shutdown()

    def _main(self, args):
        # type: (List[str]) -> int
        options, args = self.parse_args(args)

        # Set verbosity so that it can be used elsewhere.
        self.verbosity = options.verbose - options.quiet

        level_number = setup_logging(
            verbosity=self.verbosity,
            no_color=options.no_color,
            user_log_file=options.log,
        )

        if sys.version_info[:2] == (2, 7):
            message = (
                "A future version of pip will drop support for Python 2.7. "
                "More details about Python 2 support in pip, can be found at "
                "https://pip.pypa.io/en/latest/development/release-process/#python-2-support"  # noqa
            )
            if platform.python_implementation() == "CPython":
                message = (
                    "Python 2.7 will reach the end of its life on January "
                    "1st, 2020. Please upgrade your Python as Python 2.7 "
                    "won't be maintained after that date. "
                ) + message
            deprecated(message, replacement=None, gone_in=None)

        # TODO: Try to get these passing down from the command?
        #       without resorting to os.environ to hold these.
        #       This also affects isolated builds and it should.

        if options.no_input:
            os.environ['PIP_NO_INPUT'] = '1'

        if options.exists_action:
            os.environ['PIP_EXISTS_ACTION'] = ' '.join(options.exists_action)

        if options.require_venv and not self.ignore_require_venv:
            # If a venv is required check if it can really be found
            if not running_under_virtualenv():
                logger.critical(
                    'Could not find an activated virtualenv (required).'
                )
                sys.exit(VIRTUALENV_NOT_FOUND)

        try:
            status = self.run(options, args)
            # FIXME: all commands should return an exit status
            # and when it is done, isinstance is not needed anymore
            if isinstance(status, int):
                return status
        except PreviousBuildDirError as exc:
            logger.critical(str(exc))
            logger.debug('Exception information:', exc_info=True)

            return PREVIOUS_BUILD_DIR_ERROR
        except (InstallationError, UninstallationError, BadCommand) as exc:
            logger.critical(str(exc))
            logger.debug('Exception information:', exc_info=True)

            return ERROR
        except CommandError as exc:
            logger.critical('%s', exc)
            logger.debug('Exception information:', exc_info=True)

            return ERROR
        except BrokenStdoutLoggingError:
            # Bypass our logger and write any remaining messages to stderr
            # because stdout no longer works.
            print('ERROR: Pipe to stdout was broken', file=sys.stderr)
            if level_number <= logging.DEBUG:
                traceback.print_exc(file=sys.stderr)

            return ERROR
        except KeyboardInterrupt:
            logger.critical('Operation cancelled by user')
            logger.debug('Exception information:', exc_info=True)

            return ERROR
        except BaseException:
            logger.critical('Exception:', exc_info=True)

            return UNKNOWN_ERROR
        finally:
            self.handle_pip_version_check(options)

        return SUCCESS
PK��[۬w���status_codes.pynu�[���from __future__ import absolute_import

SUCCESS = 0
ERROR = 1
UNKNOWN_ERROR = 2
VIRTUALENV_NOT_FOUND = 3
PREVIOUS_BUILD_DIR_ERROR = 4
NO_MATCHES_FOUND = 23
PK��[���%%	parser.pynu�[���"""Base option parser setup"""

# The following comment should be removed at some point in the future.
# mypy: disallow-untyped-defs=False

from __future__ import absolute_import

import logging
import optparse
import sys
import textwrap
from distutils.util import strtobool

from pip._vendor.six import string_types

from pip._internal.cli.status_codes import UNKNOWN_ERROR
from pip._internal.configuration import Configuration, ConfigurationError
from pip._internal.utils.compat import get_terminal_size

logger = logging.getLogger(__name__)


class PrettyHelpFormatter(optparse.IndentedHelpFormatter):
    """A prettier/less verbose help formatter for optparse."""

    def __init__(self, *args, **kwargs):
        # help position must be aligned with __init__.parseopts.description
        kwargs['max_help_position'] = 30
        kwargs['indent_increment'] = 1
        kwargs['width'] = get_terminal_size()[0] - 2
        optparse.IndentedHelpFormatter.__init__(self, *args, **kwargs)

    def format_option_strings(self, option):
        return self._format_option_strings(option, ' <%s>', ', ')

    def _format_option_strings(self, option, mvarfmt=' <%s>', optsep=', '):
        """
        Return a comma-separated list of option strings and metavars.

        :param option:  tuple of (short opt, long opt), e.g: ('-f', '--format')
        :param mvarfmt: metavar format string - evaluated as mvarfmt % metavar
        :param optsep:  separator
        """
        opts = []

        if option._short_opts:
            opts.append(option._short_opts[0])
        if option._long_opts:
            opts.append(option._long_opts[0])
        if len(opts) > 1:
            opts.insert(1, optsep)

        if option.takes_value():
            metavar = option.metavar or option.dest.lower()
            opts.append(mvarfmt % metavar.lower())

        return ''.join(opts)

    def format_heading(self, heading):
        if heading == 'Options':
            return ''
        return heading + ':\n'

    def format_usage(self, usage):
        """
        Ensure there is only one newline between usage and the first heading
        if there is no description.
        """
        msg = '\nUsage: %s\n' % self.indent_lines(textwrap.dedent(usage), "  ")
        return msg

    def format_description(self, description):
        # leave full control over description to us
        if description:
            if hasattr(self.parser, 'main'):
                label = 'Commands'
            else:
                label = 'Description'
            # some doc strings have initial newlines, some don't
            description = description.lstrip('\n')
            # some doc strings have final newlines and spaces, some don't
            description = description.rstrip()
            # dedent, then reindent
            description = self.indent_lines(textwrap.dedent(description), "  ")
            description = '%s:\n%s\n' % (label, description)
            return description
        else:
            return ''

    def format_epilog(self, epilog):
        # leave full control over epilog to us
        if epilog:
            return epilog
        else:
            return ''

    def indent_lines(self, text, indent):
        new_lines = [indent + line for line in text.split('\n')]
        return "\n".join(new_lines)


class UpdatingDefaultsHelpFormatter(PrettyHelpFormatter):
    """Custom help formatter for use in ConfigOptionParser.

    This is updates the defaults before expanding them, allowing
    them to show up correctly in the help listing.
    """

    def expand_default(self, option):
        if self.parser is not None:
            self.parser._update_defaults(self.parser.defaults)
        return optparse.IndentedHelpFormatter.expand_default(self, option)


class CustomOptionParser(optparse.OptionParser):

    def insert_option_group(self, idx, *args, **kwargs):
        """Insert an OptionGroup at a given position."""
        group = self.add_option_group(*args, **kwargs)

        self.option_groups.pop()
        self.option_groups.insert(idx, group)

        return group

    @property
    def option_list_all(self):
        """Get a list of all options, including those in option groups."""
        res = self.option_list[:]
        for i in self.option_groups:
            res.extend(i.option_list)

        return res


class ConfigOptionParser(CustomOptionParser):
    """Custom option parser which updates its defaults by checking the
    configuration files and environmental variables"""

    def __init__(self, *args, **kwargs):
        self.name = kwargs.pop('name')

        isolated = kwargs.pop("isolated", False)
        self.config = Configuration(isolated)

        assert self.name
        optparse.OptionParser.__init__(self, *args, **kwargs)

    def check_default(self, option, key, val):
        try:
            return option.check_value(key, val)
        except optparse.OptionValueError as exc:
            print("An error occurred during configuration: %s" % exc)
            sys.exit(3)

    def _get_ordered_configuration_items(self):
        # Configuration gives keys in an unordered manner. Order them.
        override_order = ["global", self.name, ":env:"]

        # Pool the options into different groups
        section_items = {name: [] for name in override_order}
        for section_key, val in self.config.items():
            # ignore empty values
            if not val:
                logger.debug(
                    "Ignoring configuration key '%s' as it's value is empty.",
                    section_key
                )
                continue

            section, key = section_key.split(".", 1)
            if section in override_order:
                section_items[section].append((key, val))

        # Yield each group in their override order
        for section in override_order:
            for key, val in section_items[section]:
                yield key, val

    def _update_defaults(self, defaults):
        """Updates the given defaults with values from the config files and
        the environ. Does a little special handling for certain types of
        options (lists)."""

        # Accumulate complex default state.
        self.values = optparse.Values(self.defaults)
        late_eval = set()
        # Then set the options with those values
        for key, val in self._get_ordered_configuration_items():
            # '--' because configuration supports only long names
            option = self.get_option('--' + key)

            # Ignore options not present in this parser. E.g. non-globals put
            # in [global] by users that want them to apply to all applicable
            # commands.
            if option is None:
                continue

            if option.action in ('store_true', 'store_false', 'count'):
                try:
                    val = strtobool(val)
                except ValueError:
                    error_msg = invalid_config_error_message(
                        option.action, key, val
                    )
                    self.error(error_msg)

            elif option.action == 'append':
                val = val.split()
                val = [self.check_default(option, key, v) for v in val]
            elif option.action == 'callback':
                late_eval.add(option.dest)
                opt_str = option.get_opt_string()
                val = option.convert_value(opt_str, val)
                # From take_action
                args = option.callback_args or ()
                kwargs = option.callback_kwargs or {}
                option.callback(option, opt_str, val, self, *args, **kwargs)
            else:
                val = self.check_default(option, key, val)

            defaults[option.dest] = val

        for key in late_eval:
            defaults[key] = getattr(self.values, key)
        self.values = None
        return defaults

    def get_default_values(self):
        """Overriding to make updating the defaults after instantiation of
        the option parser possible, _update_defaults() does the dirty work."""
        if not self.process_default_values:
            # Old, pre-Optik 1.5 behaviour.
            return optparse.Values(self.defaults)

        # Load the configuration, or error out in case of an error
        try:
            self.config.load()
        except ConfigurationError as err:
            self.exit(UNKNOWN_ERROR, str(err))

        defaults = self._update_defaults(self.defaults.copy())  # ours
        for option in self._get_all_options():
            default = defaults.get(option.dest)
            if isinstance(default, string_types):
                opt_str = option.get_opt_string()
                defaults[option.dest] = option.check_value(opt_str, default)
        return optparse.Values(defaults)

    def error(self, msg):
        self.print_usage(sys.stderr)
        self.exit(UNKNOWN_ERROR, "%s\n" % msg)


def invalid_config_error_message(action, key, val):
    """Returns a better error message when invalid configuration option
    is provided."""
    if action in ('store_true', 'store_false'):
        return ("{0} is not a valid value for {1} option, "
                "please specify a boolean value like yes/no, "
                "true/false or 1/0 instead.").format(val, key)

    return ("{0} is not a valid value for {1} option, "
            "please specify a numerical value like 1/0 "
            "instead.").format(val, key)
PK��[C´zc,c,req_command.pynu�[���"""Contains the Command base classes that depend on PipSession.

The classes in this module are in a separate module so the commands not
needing download / PackageFinder capability don't unnecessarily import the
PackageFinder machinery and all its vendored dependencies, etc.
"""

# The following comment should be removed at some point in the future.
# mypy: disallow-untyped-defs=False

import os
from functools import partial

from pip._internal.cli.base_command import Command
from pip._internal.cli.command_context import CommandContextMixIn
from pip._internal.exceptions import CommandError
from pip._internal.index import PackageFinder
from pip._internal.legacy_resolve import Resolver
from pip._internal.models.selection_prefs import SelectionPreferences
from pip._internal.network.session import PipSession
from pip._internal.operations.prepare import RequirementPreparer
from pip._internal.req.constructors import (
    install_req_from_editable,
    install_req_from_line,
    install_req_from_req_string,
)
from pip._internal.req.req_file import parse_requirements
from pip._internal.self_outdated_check import (
    make_link_collector,
    pip_self_version_check,
)
from pip._internal.utils.misc import normalize_path
from pip._internal.utils.typing import MYPY_CHECK_RUNNING

if MYPY_CHECK_RUNNING:
    from optparse import Values
    from typing import List, Optional, Tuple
    from pip._internal.cache import WheelCache
    from pip._internal.models.target_python import TargetPython
    from pip._internal.req.req_set import RequirementSet
    from pip._internal.req.req_tracker import RequirementTracker
    from pip._internal.utils.temp_dir import TempDirectory


class SessionCommandMixin(CommandContextMixIn):

    """
    A class mixin for command classes needing _build_session().
    """
    def __init__(self):
        super(SessionCommandMixin, self).__init__()
        self._session = None  # Optional[PipSession]

    @classmethod
    def _get_index_urls(cls, options):
        """Return a list of index urls from user-provided options."""
        index_urls = []
        if not getattr(options, "no_index", False):
            url = getattr(options, "index_url", None)
            if url:
                index_urls.append(url)
        urls = getattr(options, "extra_index_urls", None)
        if urls:
            index_urls.extend(urls)
        # Return None rather than an empty list
        return index_urls or None

    def get_default_session(self, options):
        # type: (Values) -> PipSession
        """Get a default-managed session."""
        if self._session is None:
            self._session = self.enter_context(self._build_session(options))
        return self._session

    def _build_session(self, options, retries=None, timeout=None):
        # type: (Values, Optional[int], Optional[int]) -> PipSession
        session = PipSession(
            cache=(
                normalize_path(os.path.join(options.cache_dir, "http"))
                if options.cache_dir else None
            ),
            retries=retries if retries is not None else options.retries,
            trusted_hosts=options.trusted_hosts,
            index_urls=self._get_index_urls(options),
        )

        # Handle custom ca-bundles from the user
        if options.cert:
            session.verify = options.cert

        # Handle SSL client certificate
        if options.client_cert:
            session.cert = options.client_cert

        # Handle timeouts
        if options.timeout or timeout:
            session.timeout = (
                timeout if timeout is not None else options.timeout
            )

        # Handle configured proxies
        if options.proxy:
            session.proxies = {
                "http": options.proxy,
                "https": options.proxy,
            }

        # Determine if we can prompt the user for authentication or not
        session.auth.prompting = not options.no_input

        return session


class IndexGroupCommand(Command, SessionCommandMixin):

    """
    Abstract base class for commands with the index_group options.

    This also corresponds to the commands that permit the pip version check.
    """

    def handle_pip_version_check(self, options):
        # type: (Values) -> None
        """
        Do the pip version check if not disabled.

        This overrides the default behavior of not doing the check.
        """
        # Make sure the index_group options are present.
        assert hasattr(options, 'no_index')

        if options.disable_pip_version_check or options.no_index:
            return

        # Otherwise, check if we're using the latest version of pip available.
        session = self._build_session(
            options,
            retries=0,
            timeout=min(5, options.timeout)
        )
        with session:
            pip_self_version_check(session, options)


class RequirementCommand(IndexGroupCommand):

    @staticmethod
    def make_requirement_preparer(
        temp_build_dir,           # type: TempDirectory
        options,                  # type: Values
        req_tracker,              # type: RequirementTracker
        download_dir=None,        # type: str
        wheel_download_dir=None,  # type: str
    ):
        # type: (...) -> RequirementPreparer
        """
        Create a RequirementPreparer instance for the given parameters.
        """
        temp_build_dir_path = temp_build_dir.path
        assert temp_build_dir_path is not None
        return RequirementPreparer(
            build_dir=temp_build_dir_path,
            src_dir=options.src_dir,
            download_dir=download_dir,
            wheel_download_dir=wheel_download_dir,
            progress_bar=options.progress_bar,
            build_isolation=options.build_isolation,
            req_tracker=req_tracker,
        )

    @staticmethod
    def make_resolver(
        preparer,                            # type: RequirementPreparer
        session,                             # type: PipSession
        finder,                              # type: PackageFinder
        options,                             # type: Values
        wheel_cache=None,                    # type: Optional[WheelCache]
        use_user_site=False,                 # type: bool
        ignore_installed=True,               # type: bool
        ignore_requires_python=False,        # type: bool
        force_reinstall=False,               # type: bool
        upgrade_strategy="to-satisfy-only",  # type: str
        use_pep517=None,                     # type: Optional[bool]
        py_version_info=None            # type: Optional[Tuple[int, ...]]
    ):
        # type: (...) -> Resolver
        """
        Create a Resolver instance for the given parameters.
        """
        make_install_req = partial(
            install_req_from_req_string,
            isolated=options.isolated_mode,
            wheel_cache=wheel_cache,
            use_pep517=use_pep517,
        )
        return Resolver(
            preparer=preparer,
            session=session,
            finder=finder,
            make_install_req=make_install_req,
            use_user_site=use_user_site,
            ignore_dependencies=options.ignore_dependencies,
            ignore_installed=ignore_installed,
            ignore_requires_python=ignore_requires_python,
            force_reinstall=force_reinstall,
            upgrade_strategy=upgrade_strategy,
            py_version_info=py_version_info
        )

    def populate_requirement_set(
        self,
        requirement_set,  # type: RequirementSet
        args,             # type: List[str]
        options,          # type: Values
        finder,           # type: PackageFinder
        session,          # type: PipSession
        wheel_cache,      # type: Optional[WheelCache]
    ):
        # type: (...) -> None
        """
        Marshal cmd line args into a requirement set.
        """
        # NOTE: As a side-effect, options.require_hashes and
        #       requirement_set.require_hashes may be updated

        for filename in options.constraints:
            for req_to_add in parse_requirements(
                    filename,
                    constraint=True, finder=finder, options=options,
                    session=session, wheel_cache=wheel_cache):
                req_to_add.is_direct = True
                requirement_set.add_requirement(req_to_add)

        for req in args:
            req_to_add = install_req_from_line(
                req, None, isolated=options.isolated_mode,
                use_pep517=options.use_pep517,
                wheel_cache=wheel_cache
            )
            req_to_add.is_direct = True
            requirement_set.add_requirement(req_to_add)

        for req in options.editables:
            req_to_add = install_req_from_editable(
                req,
                isolated=options.isolated_mode,
                use_pep517=options.use_pep517,
                wheel_cache=wheel_cache
            )
            req_to_add.is_direct = True
            requirement_set.add_requirement(req_to_add)

        for filename in options.requirements:
            for req_to_add in parse_requirements(
                    filename,
                    finder=finder, options=options, session=session,
                    wheel_cache=wheel_cache,
                    use_pep517=options.use_pep517):
                req_to_add.is_direct = True
                requirement_set.add_requirement(req_to_add)
        # If --require-hashes was a line in a requirements file, tell
        # RequirementSet about it:
        requirement_set.require_hashes = options.require_hashes

        if not (args or options.editables or options.requirements):
            opts = {'name': self.name}
            if options.find_links:
                raise CommandError(
                    'You must give at least one requirement to %(name)s '
                    '(maybe you meant "pip %(name)s %(links)s"?)' %
                    dict(opts, links=' '.join(options.find_links)))
            else:
                raise CommandError(
                    'You must give at least one requirement to %(name)s '
                    '(see "pip help %(name)s")' % opts)

    def _build_package_finder(
        self,
        options,               # type: Values
        session,               # type: PipSession
        target_python=None,    # type: Optional[TargetPython]
        ignore_requires_python=None,  # type: Optional[bool]
    ):
        # type: (...) -> PackageFinder
        """
        Create a package finder appropriate to this requirement command.

        :param ignore_requires_python: Whether to ignore incompatible
            "Requires-Python" values in links. Defaults to False.
        """
        link_collector = make_link_collector(session, options=options)
        selection_prefs = SelectionPreferences(
            allow_yanked=True,
            format_control=options.format_control,
            allow_all_prereleases=options.pre,
            prefer_binary=options.prefer_binary,
            ignore_requires_python=ignore_requires_python,
        )

        return PackageFinder.create(
            link_collector=link_collector,
            selection_prefs=selection_prefs,
            target_python=target_python,
        )
PK�u[X����+__pycache__/chardetect.cpython-36.opt-1.pycnu�[���3

�&�]�
�@srdZddlmZmZmZddlZddlZddlmZddl	m
Z
ddlmZd
dd	�Z
dd
d�Zedkrne�dS)a
Script which takes one or more file paths and reports on their detected
encodings

Example::

    % chardetect somefile someotherfile
    somefile: windows-1252 with confidence 0.5
    someotherfile: ascii with confidence 1.0

If no paths are provided, it takes its input from stdin.

�)�absolute_import�print_function�unicode_literalsN)�__version__)�PY2)�UniversalDetector�stdincCs|t�}x&|D]}t|�}|j|�|jrPqW|j�|j}trP|jtj	�d�}|drndj
||d|d�Sdj
|�SdS)z�
    Return a string describing the probable encoding of a file or
    list of strings.

    :param lines: The lines to get the encoding of.
    :type lines: Iterable of bytes
    :param name: Name of file or collection of lines
    :type name: str
    �ignore�encodingz{0}: {1} with confidence {2}Z
confidencez{0}: no resultN)r�	bytearrayZfeed�done�close�resultr�decode�sys�getfilesystemencoding�format)�lines�name�u�liner�r� /usr/lib/python3.6/chardetect.py�description_ofs



rcCs�tjdd�}|jddtjd�dtr(tjntjjgd�|jdd	d
jt	�d�|j
|�}x4|jD]*}|j�rxt
dtjd�t
t||j��q^WdS)z�
    Handles command line arguments and gets things started.

    :param argv: List of arguments, as if specified on the command-line.
                 If None, ``sys.argv[1:]`` is used instead.
    :type argv: list of str
    zVTakes one or more file paths and reports their detected                      encodings)�description�inputz^File whose encoding we would like to determine.                               (default: stdin)�rb�*)�help�type�nargs�defaultz	--version�versionz%(prog)s {0})�actionr"z0You are running chardetect interactively. Press z8CTRL-D twice at the start of a blank line to signal the z4end of your input. If you want help, run chardetect z--help
)�fileNzhYou are running chardetect interactively. Press CTRL-D twice at the start of a blank line to signal the z�You are running chardetect interactively. Press CTRL-D twice at the start of a blank line to signal the end of your input. If you want help, run chardetect z�You are running chardetect interactively. Press CTRL-D twice at the start of a blank line to signal the end of your input. If you want help, run chardetect --help
)�argparse�ArgumentParser�add_argumentZFileTyperrr�bufferrr�
parse_argsr�isatty�print�stderrrr)�argv�parser�args�frrr�main5s	

r1�__main__)r)N)�__doc__Z
__future__rrrr%rZchardetrZchardet.compatrZchardet.universaldetectorrrr1�__name__rrrr�<module>
s

PK�u[��U�qq#__pycache__/__init__.cpython-36.pycnu�[���3

��X�@sdS)N�rrr�/usr/lib/python3.6/__init__.py�<module>sPK�u[��U�qq)__pycache__/__init__.cpython-36.opt-1.pycnu�[���3

��X�@sdS)N�rrr�/usr/lib/python3.6/__init__.py�<module>sPK�u[X����%__pycache__/chardetect.cpython-36.pycnu�[���3

�&�]�
�@srdZddlmZmZmZddlZddlZddlmZddl	m
Z
ddlmZd
dd	�Z
dd
d�Zedkrne�dS)a
Script which takes one or more file paths and reports on their detected
encodings

Example::

    % chardetect somefile someotherfile
    somefile: windows-1252 with confidence 0.5
    someotherfile: ascii with confidence 1.0

If no paths are provided, it takes its input from stdin.

�)�absolute_import�print_function�unicode_literalsN)�__version__)�PY2)�UniversalDetector�stdincCs|t�}x&|D]}t|�}|j|�|jrPqW|j�|j}trP|jtj	�d�}|drndj
||d|d�Sdj
|�SdS)z�
    Return a string describing the probable encoding of a file or
    list of strings.

    :param lines: The lines to get the encoding of.
    :type lines: Iterable of bytes
    :param name: Name of file or collection of lines
    :type name: str
    �ignore�encodingz{0}: {1} with confidence {2}Z
confidencez{0}: no resultN)r�	bytearrayZfeed�done�close�resultr�decode�sys�getfilesystemencoding�format)�lines�name�u�liner�r� /usr/lib/python3.6/chardetect.py�description_ofs



rcCs�tjdd�}|jddtjd�dtr(tjntjjgd�|jdd	d
jt	�d�|j
|�}x4|jD]*}|j�rxt
dtjd�t
t||j��q^WdS)z�
    Handles command line arguments and gets things started.

    :param argv: List of arguments, as if specified on the command-line.
                 If None, ``sys.argv[1:]`` is used instead.
    :type argv: list of str
    zVTakes one or more file paths and reports their detected                      encodings)�description�inputz^File whose encoding we would like to determine.                               (default: stdin)�rb�*)�help�type�nargs�defaultz	--version�versionz%(prog)s {0})�actionr"z0You are running chardetect interactively. Press z8CTRL-D twice at the start of a blank line to signal the z4end of your input. If you want help, run chardetect z--help
)�fileNzhYou are running chardetect interactively. Press CTRL-D twice at the start of a blank line to signal the z�You are running chardetect interactively. Press CTRL-D twice at the start of a blank line to signal the end of your input. If you want help, run chardetect z�You are running chardetect interactively. Press CTRL-D twice at the start of a blank line to signal the end of your input. If you want help, run chardetect --help
)�argparse�ArgumentParser�add_argumentZFileTyperrr�bufferrr�
parse_argsr�isatty�print�stderrrr)�argv�parser�args�frrr�main5s	

r1�__main__)r)N)�__doc__Z
__future__rrrr%rZchardetrZchardet.compatrZchardet.universaldetectorrrr1�__name__rrrr�<module>
s

PK�u[<��
�

chardetect.pynu�[���"""
Script which takes one or more file paths and reports on their detected
encodings

Example::

    % chardetect somefile someotherfile
    somefile: windows-1252 with confidence 0.5
    someotherfile: ascii with confidence 1.0

If no paths are provided, it takes its input from stdin.

"""

from __future__ import absolute_import, print_function, unicode_literals

import argparse
import sys

from chardet import __version__
from chardet.compat import PY2
from chardet.universaldetector import UniversalDetector


def description_of(lines, name='stdin'):
    """
    Return a string describing the probable encoding of a file or
    list of strings.

    :param lines: The lines to get the encoding of.
    :type lines: Iterable of bytes
    :param name: Name of file or collection of lines
    :type name: str
    """
    u = UniversalDetector()
    for line in lines:
        line = bytearray(line)
        u.feed(line)
        # shortcut out of the loop to save reading further - particularly useful if we read a BOM.
        if u.done:
            break
    u.close()
    result = u.result
    if PY2:
        name = name.decode(sys.getfilesystemencoding(), 'ignore')
    if result['encoding']:
        return '{0}: {1} with confidence {2}'.format(name, result['encoding'],
                                                     result['confidence'])
    else:
        return '{0}: no result'.format(name)


def main(argv=None):
    """
    Handles command line arguments and gets things started.

    :param argv: List of arguments, as if specified on the command-line.
                 If None, ``sys.argv[1:]`` is used instead.
    :type argv: list of str
    """
    # Get command line arguments
    parser = argparse.ArgumentParser(
        description="Takes one or more file paths and reports their detected \
                     encodings")
    parser.add_argument('input',
                        help='File whose encoding we would like to determine. \
                              (default: stdin)',
                        type=argparse.FileType('rb'), nargs='*',
                        default=[sys.stdin if PY2 else sys.stdin.buffer])
    parser.add_argument('--version', action='version',
                        version='%(prog)s {0}'.format(__version__))
    args = parser.parse_args(argv)

    for f in args.input:
        if f.isatty():
            print("You are running chardetect interactively. Press " +
                  "CTRL-D twice at the start of a blank line to signal the " +
                  "end of your input. If you want help, run chardetect " +
                  "--help\n", file=sys.stderr)
        print(description_of(f, f.name))


if __name__ == '__main__':
    main()
PK}K�Z�t�``
cls/cgroup.sonuȯ��PK}K�Z���.�.�cls/basic.sonuȯ��PK}K�Z>L(�h.h.iMqdisc/bfifo.sonuȯ��PK}K�Z���8080|qdisc/htb.sonuȯ��PK}K�Z��^�PP��qdisc/blackhole.sonuȯ��PK}K�Z��PP�qdisc/ingress.sonuȯ��PK}K�Z��_�//��qdisc/fq_codel.sonuȯ��PK}K�Z5�ۃ�/�/
�qdisc/hfsc.sonuȯ��PK}K�Z��תppIqdisc/pfifo.sonuȯ��PK}K�Z h)�.�.
�gqdisc/plug.sonuȯ��PK��[*�Ɩautocompletion.pynu�[���PK��[��2 �__init__.pynu�[���PK��[l2�n�h�h
\�cmdoptions.pynu�[���PK��[���pmain_parser.pynu�[���PK��[�-��]]*�#__pycache__/command_context.cpython-38.pycnu�[���PK��[4��FKFK+h(__pycache__/cmdoptions.cpython-38.opt-1.pycnu�[���PK��[�qq)	t__pycache__/autocompletion.cpython-38.pycnu�[���PK��[p,3�FF&Ӈ__pycache__/req_command.cpython-38.pycnu�[���PK��[��E��)o�__pycache__/__init__.cpython-38.opt-1.pycnu�[���PK��[�
Cmm'��__pycache__/status_codes.cpython-38.pycnu�[���PK��[��m��'x�__pycache__/base_command.cpython-38.pycnu�[���PK��[���@,��__pycache__/req_command.cpython-38.opt-1.pycnu�[���PK��[G�oo&��__pycache__/main_parser.cpython-38.pycnu�[���PK��[~)(w��-��__pycache__/base_command.cpython-38.opt-1.pycnu�[���PK��[p���##!��__pycache__/parser.cpython-38.pycnu�[���PK��[G�oo,�__pycache__/main_parser.cpython-38.opt-1.pycnu�[���PK��[4��FKFK%�"__pycache__/cmdoptions.cpython-38.pycnu�[���PK��[�qq/Mn__pycache__/autocompletion.cpython-38.opt-1.pycnu�[���PK��[�
Cmm-�__pycache__/status_codes.cpython-38.opt-1.pycnu�[���PK��[�4��++0�__pycache__/command_context.cpython-38.opt-1.pycnu�[���PK��[�j~�"�"'r�__pycache__/parser.cpython-38.opt-1.pycnu�[���PK��[��E��#��__pycache__/__init__.cpython-38.pycnu�[���PK��[��s1��command_context.pynu�[���PK��[�$�/hh[�base_command.pynu�[���PK��[۬w����status_codes.pynu�[���PK��[���%%	��parser.pynu�[���PK��[C´zc,c,%�req_command.pynu�[���PK�u[X����+�__pycache__/chardetect.cpython-36.opt-1.pycnu�[���PK�u[��U�qq#�(__pycache__/__init__.cpython-36.pycnu�[���PK�u[��U�qq)�)__pycache__/__init__.cpython-36.opt-1.pycnu�[���PK�u[X����%h*__pycache__/chardetect.cpython-36.pycnu�[���PK�u[<��
�

v6chardetect.pynu�[���PK**OA