
    Dh,                     r   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlZd dl	Z	d dl
Z
d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ  ej4                  e      Z G d
 de      Zd dlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dlm)Z) d dl*m+Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 e,Z3e4Z4e"Z5d Z6d Z7d5dZ8d6dZ9	 d dl:m;c m<Z= e=j                  ZBd dlCZCd ZDeEd        ZFeEd        ZGeFe_F        eGe_G        d ZHd ZI	  ej                          dZKd ZMd7dZNd ZOd  ZP	 d dlQZRej                  j                  d!d"      ZUeUj                         d#k(   ZWd$ZX e
j                  d%eXz   d&z         ZZd'Z[d(j                  e[eX)      Z]e[e]d*Z^g d+Z_d,Z`d-d.j                  e_D  cg c]  } | e^z  	 c}       z   d/z   Zbd0e`z   d1z   Zcd2ebz   d-z   ecz   d3z   Zd e
j                  d%edz   d&z         Ze efd4      Zg	 d dlhZhdZiy# e>$ r d dl?m;c m@Z= Y >w xY w# eL$ r dZKY w xY w# e>$ r dZWY w xY wc c} w # e>$ r dZiY yw xY w)8    N)HTTPMessage)OrderedDict)MutableMapping)floor)six)MD5UnavailableError)tzlocal)
exceptionsc                       e Zd Zy)HTTPHeadersN)__name__
__module____qualname__     q/var/www/fastuser/data/www/generator.snapmosaic.io/flask_app/venv/lib/python3.12/site-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    | j                   j                  j                  j                  j	                  |       y)z|Set 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                 2    t        j                  |       d   S )N   )inspectgetfullargspec)funcs    r   accepts_kwargsr0   H   s     !!$'**r   c                     | S Nr   sencodingerrorss      r   ensure_unicoder7   M   s    Hr   c                     t        | t              r| j                  ||      S t        | t              r| S t	        dt        |        d      )Nz Expected str or bytes, received .)
isinstancestrencodebytes
ValueErrortyper3   s      r   ensure_bytesr@   Q   sE    !Sxx&))!U
7QyB
CCr   c                  R    t        j                  ddt        j                  d       y )Nignorez+A true SSLContext object is not available.*z.*urllib3\.util\.ssl_)messagecategorymodule)warningsfilterwarningsr
   InsecurePlatformWarningr   r   r   filter_ssl_warningsrI   b   s"    =33'	r   c                 N     |        }|j                         D ]
  \  }}|||<    |S r2   )items)clsdnew_instancekeyvalues        r   	from_dictrQ   l   s2    5Lggi "
U!S"r   c                 2     |        }|D ]
  \  }}|||<    |S r2   r   )rL   pairsrN   rO   rP   s        r   
from_pairsrT   t   s,    5L "
U!S"r   c                 0    t        j                   |       }|S )zI
    This used to be a compat shim for 2.6 but is now just an alias.
    )copy)kwargscopy_kwargss     r   rX   rX      s     ))F#Kr   c                 "    | j                         S )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   rZ   rZ      s       r   TFc                  L    t         rt        j                  | i |S t               )a  
    Attempts to get an md5 hashing object.

    :param raise_error_if_unavailable: raise an error if md5 is unavailable on
        this system. If False, None will be returned if it is unavailable.
    :type raise_error_if_unavailable: bool
    :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   )argsrW   s     r   get_md5ra      s$     {{D+F++!##r   c                 p    |t         j                  }|dk(  rt        |       S t        j                  |       S )Nwin32)sysplatform_windows_shell_splitshlexsplit)r4   re   s     r   compat_shell_splitri      s2    <<7#A&&{{1~r   c           
         | sg S g }g }d}d}| D ]  }|dk(  r|dz  }|dk(  ra|dkD  rG|j                  dt        t        |dz              z         |dz  }d}|dk(  r|j                  d       _| }|j                  d       t|dv rC|sA|dkD  r|j                  d|z         d}|s|j                  dj                  |             g }|dkD  r|j                  d|z         d}|j                  |        |rt	        d	|        |dkD  r|j                  d|z         |r |j                  dj                  |             |S )
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>   )r4   
componentsbuff	is_quotednum_backslashes	character	remainders          r   rf   rf      s~   ( 	JDIO 1#	
 q O#" D3u_q-@'A#BBC+a/	"#> KK$ &I KKO+%i "D?23"# !!"''$-0 "D?23"#KK	"c1#h ;A3?@@ D?*+ "''$-(r   c                  R    t         j                  dk(  rddlm}  t        | fS t        fS )Nrc   r   
tzwinlocal)rd   re   dateutil.tzr|   r	   r{   s    r   get_tzinfo_optionsr~     s&     ||w*$$zr   BOTO_DISABLE_CRTfalsetruez(?:[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strictr2   )jrV   datetimerd   r-   rF   r^   http.clientr   loggingrg   reoscollectionsr   collections.abcr   mathr   botocore.vendoredr   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*   r0   r7   r@   xml.etree.cElementTreeetreecElementTreeETreeImportErrorxml.etree.ElementTreeElementTree
ParseErrorXMLParseErrorjsonrI   classmethodrQ   rT   rX   rZ   r_   r]   r>   ra   ri   rf   r~   awscrt.authawscrtenvirongetdisabledlowerHAS_CRTIPV4_PATcompileIPV4_REHEX_PATformatLS32_PAT_subs_variationsUNRESERVED_PATrs   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***         " # 	!GKKMM
$$[|	 zz~~0':H.."f,,G ,
"**S8^c)
*
#**wX*F*, L  388<1QY<==C.1FF!F*[87B

3/#56 X& HC  *))*|  Mb  GN =  HsN   	G7 H #4H !H'
0H, 7H	H	HHH$#H$,H65H6