
    g,                        S SK r S SKrS SKrS SKrS SKrS SKrS SKJr  S SKrS SK	r	S SK
r
S SKrS SKJr  S SKJr  S SKJr  S SKrS SKJr  S SKJr  S SKJr  \R2                  " \5      r " S	 S
\5      rS SKJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'  S SKJ(r(  S SK)J*r+  S SK,J-r-  S SK.J/r/  S SK0J1r1  \+r2\3r3\!r4S r5S r6S5S jr7S6S jr8 S SK9J:s  J;r<  \<R                  rAS SKBrBS rC\DS 5       rE\DS 5       rF\E\lE        \F\lF        S rGS rH \R                  " 5         SrJS rLS7S jrMS rNS rO S SKPrQ\R                  R                  S S!5      rT\TR                  5       S":X  + rVS# rWS$rX\
R                  " S%\X-   S&-   5      rZS'r[S(R                  \[\XS)9r]\[\]S*.r^/ S+Qr_S,r`S-S.R                  \_ V s/ s H  o \^-  PM	     sn 5      -   S/-   rbS0\`-   S1-   rcS2\b-   S--   \c-   S3-   rd\
R                  " S%\d-   S&-   5      re\f" S45      rg S SKhrhSrig! \= a    S SK>J:s  J?r<   GNBf = f! \K a    SrJ GNf = f! \= a    SrV Nf = fs  sn f ! \= a    Sri gf = f)8    N)HTTPMessage)OrderedDict)MutableMapping)floor)MD5UnavailableError)tzlocal)
exceptionsc                       \ rS rSrSrg)HTTPHeaders%    N)__name__
__module____qualname____firstlineno____static_attributes__r       1/usr/lib/python3/dist-packages/botocore/compat.pyr   r   %   s    r   r   )
quote	urlencodeunquoteunquote_plusurlparseurlsplit
urlunspliturljoin	parse_qslparse_qs)HTTPResponse)IOBase)encodebytes)
formatdate)zip_longestc                 v    U R                   R                  R                  R                  R	                  U5        g)ztSet the timeout of the socket from an HTTPResponse.

:param http_response: An instance of ``httplib.HTTPResponse``

N)_fpfpraw_sock
settimeout)http_responsetimeouts     r   set_socket_timeoutr,   @   s*     ""--g6r   c                 4    [         R                  " U 5      S   $ )N   )inspectgetfullargspec)funcs    r   accepts_kwargsr2   H   s     !!$'**r   c                     U $ Nr   sencodingerrorss      r   ensure_unicoder9   M   s    Hr   c                     [        U [        5      (       a  U R                  X5      $ [        U [        5      (       a  U $ [	        S[        U 5       S35      e)Nz Expected str or bytes, received .)
isinstancestrencodebytes
ValueErrortyper5   s      r   ensure_bytesrB   Q   sI    !Sxx))!U
7QyB
CCr   c                  N    [         R                  " SS[        R                  SS9  g )Nignorez+A true SSLContext object is not available.*z.*urllib3\.util\.ssl_)messagecategorymodule)warningsfilterwarningsr	   InsecurePlatformWarningr   r   r   filter_ssl_warningsrK   b   s"    =33'	r   c                 N    U " 5       nUR                  5        H	  u  p4XBU'   M     U$ r4   )items)clsdnew_instancekeyvalues        r   	from_dictrS   l   s)    5Lggi
!S  r   c                 2    U " 5       nU H	  u  p4XBU'   M     U$ r4   r   )rN   pairsrP   rQ   rR   s        r   
from_pairsrV   t   s#    5L
!S r   c                 2    [         R                   " U 5      nU$ )zA
This used to be a compat shim for 2.6 but is now just an alias.
)copy)kwargscopy_kwargss     r   rZ   rZ      s     ))F#Kr   c                 "    U R                  5       $ )z
Returns the total seconds in a ``datetime.timedelta``.

This used to be a compat shim for 2.6 but is now just an alias.

:param delta: The timedelta object
:type delta: ``datetime.timedelta``
)total_seconds)deltas    r   r\   r\      s       r   TFc                  X    [         (       a  [        R                  " U 0 UD6$ [        5       e)a"  
Attempts to get an md5 hashing object.

:param args: Args to pass to the MD5 constructor
:param kwargs: Key word arguments to pass to the MD5 constructor
:return: An MD5 hashing object if available. If it is unavailable, None
    is returned if raise_error_if_unavailable is set to False.
)MD5_AVAILABLEhashlibmd5r   )argsrY   s     r   get_md5rc      s&     }{{D+F++!##r   c                 v    Uc  [         R                  nUS:X  a  [        U 5      $ [        R                  " U 5      $ )Nwin32)sysplatform_windows_shell_splitshlexsplit)r6   rg   s     r   compat_shell_splitrk      s2    <<7#A&&{{1~r   c           
         U (       d  / $ / n/ nSnSnU  GH  nUS:X  a  US-  nM  US:X  ai  US:  aI  UR                  S[        [        US-  5      5      -  5        US-  nSnUS:X  a  UR                  S5        Mf  U(       + nUR                  S5        M  US;   aP  U(       dI  US:  a  UR                  SU-  5        SnU(       a$  UR                  SR                  U5      5        / nM  M  US:  a  UR                  SU-  5        SnUR                  U5        GM     U(       a  [	        S	U  35      eUS:  a  UR                  SU-  5        U(       a   UR                  SR                  U5      5        U$ )
a  Splits up a windows command as the built-in command parser would.

Windows has potentially bizarre rules depending on where you look. When
spawning a process via the Windows C runtime (which is what python does
when you call popen) the rules are as follows:

https://docs.microsoft.com/en-us/cpp/cpp/parsing-cpp-command-line-arguments

To summarize:

* Only space and tab are valid delimiters
* Double quotes are the only valid quotes
* Backslash is interpreted literally unless it is part of a chain that
  leads up to a double quote. Then the backslashes escape the backslashes,
  and if there is an odd number the final backslash escapes the quote.

:param s: The command string to split up into parts.
:return: A list of command components.
Fr   \   "r.    ) 	z No closing quotation in string: )appendintr   joinr@   )r6   
componentsbuff	is_quotednum_backslashes	character	remainders          r   rh   rh      s~   ( 	JDIO	
 q O#" D3u_q-@'A#BBC+a/	"#> KK$ &I KKO+%i "D?23"# !!"''$-0  "D?23"#KK	"c h ;A3?@@ D?*+ "''$-(r   c                  T    [         R                  S:X  a  SSKJn   [        U 4$ [        4$ )Nre   r   
tzwinlocal)rf   rg   dateutil.tzr~   r   r}   s    r   get_tzinfo_optionsr     s&     ||w*$$zr   BOTO_DISABLE_CRTfalsetruec                     [         (       d  g[        R                  n [        [        UR                  S5      5      n[        U5      nX0:  $ ! [        [        4 a     gf = f)z&Not intended for use outside botocore.Fr;   )	HAS_CRTawscrt__version__maprt   rj   tuple	TypeErrorr@   )minimum_versioncrt_version_strcrt_version_intscrt_version_tuples       r   has_minimum_crt_versionr   +  sb    7((OsO$9$9#$>?!"23 // z" s   *A AAz(?:[0-9]{1,3}\.){3}[0-9]{1,3}^$z[0-9A-Fa-f]{1,4}z(?:{hex}:{hex}|{ipv4}))hexipv4)r   ls32)	z(?:%(hex)s:){6}%(ls32)sz::(?:%(hex)s:){5}%(ls32)sz%(?:%(hex)s)?::(?:%(hex)s:){4}%(ls32)sz2(?:(?:%(hex)s:)?%(hex)s)?::(?:%(hex)s:){3}%(ls32)sz6(?:(?:%(hex)s:){0,2}%(hex)s)?::(?:%(hex)s:){2}%(ls32)sz/(?:(?:%(hex)s:){0,3}%(hex)s)?::%(hex)s:%(ls32)sz'(?:(?:%(hex)s:){0,4}%(hex)s)?::%(ls32)sz&(?:(?:%(hex)s:){0,5}%(hex)s)?::%(hex)sz(?:(?:%(hex)s:){0,6}%(hex)s)?::zDABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._!\-~z(?:|)z(?:%25|%)(?:[z]|%[a-fA-F0-9]{2})+z\[z)?\]z	
)NN)zutf-8strictr4   )jrX   datetimerf   r/   rH   r`   http.clientr   loggingri   reoscollectionsr   collections.abcr   mathr   sixbotocore.exceptionsr   r   r   urllib3r	   	getLoggerr   loggerr   urllib.parser   r   r   r   r   r   r   r   r   r   r   ior    _IOBasebase64r!   email.utilsr"   	itertoolsr#   	file_typezipunquote_strr,   r2   r9   rB   xml.etree.cElementTreeetreecElementTreeETreeImportErrorxml.etree.ElementTreeElementTree
ParseErrorXMLParseErrorjsonrK   classmethodrS   rV   rZ   r\   ra   r_   r@   rc   rk   rh   r   awscrt.authr   environgetdisabledlowerr   r   IPV4_PATcompileIPV4_REHEX_PATformatLS32_PAT_subs_variationsUNRESERVED_PATru   IPV6_PATZONE_ID_PATIPV6_ADDRZ_PATIPV6_ADDRZ_RE	frozensetUNSAFE_URL_CHARSgzipHAS_GZIP)xs   0r   <module>r      s     
    #   	 	 # *  
 3  			8	$	+ 	   %    " !		 7+
D***         " # 	!KKMM
$[|	 zz~~0':H.."f,G
0* ,
**S8^c)
*
#**wX*F*, L  388<1Y<==C.1FF!F*[87B

3/#56 X& H[  *))*|  M\  Gl =  HsN   	G: H $4H "H-
3H2 :HHHHH*)H*2H=<H=