o
    è’Oj×†  ã                   @   s$  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mZ d dl	m
Z
mZ d dlmZmZmZmZ d dlmZ d dlmZmZmZ G dd„ dƒZG d	d
„ d
ƒZdd„ Zdd„ Zd%dd„Z	d&dd„Z	d&dd„Z	d&dd„ZG dd„ dƒZdd„ Z 	d'dd„Z!dd „ Z"	d(d!d"„Z#d#d$„ Z$dS ))é    N)Úcreate_request_objectÚprepare_request_dict)ÚOrderedDictÚget_current_datetime)ÚParamValidationErrorÚUnknownClientMethodErrorÚUnknownSignatureVersionErrorÚ UnsupportedSignatureVersionError)ÚFrozenAuthToken)Ú	ArnParserÚdatetime2timestampÚfix_s3_hostc                   @   sŽ   e Zd ZdZ	ddd„Zedd„ ƒZedd„ ƒZed	d
„ ƒZddd„Z					ddd„Z
dd„ Zdd„ Z		ddd„ZeZ			ddd„ZdS )ÚRequestSignera0  
    An object to sign requests before they go out over the wire using
    one of the authentication mechanisms defined in ``auth.py``. This
    class fires two events scoped to a service and operation name:

    * choose-signer: Allows overriding the auth signer name.
    * before-sign: Allows mutating the request before signing.

    Together these events allow for customization of the request
    signing pipeline, including overrides, request path manipulation,
    and disabling signing per operation.


    :type service_id: botocore.model.ServiceId
    :param service_id: The service id for the service, e.g. ``S3``

    :type region_name: string
    :param region_name: Name of the service region, e.g. ``us-east-1``

    :type signing_name: string
    :param signing_name: Service signing name. This is usually the
                         same as the service name, but can differ. E.g.
                         ``emr`` vs. ``elasticmapreduce``.

    :type signature_version: string
    :param signature_version: Signature name like ``v4``.

    :type credentials: :py:class:`~botocore.credentials.Credentials`
    :param credentials: User credentials with which to sign requests.

    :type event_emitter: :py:class:`~botocore.hooks.BaseEventHooks`
    :param event_emitter: Extension mechanism to fire events.
    Nc                 C   s4   || _ || _|| _|| _|| _|| _t |¡| _d S ©N)	Ú_region_nameÚ_signing_nameÚ_signature_versionÚ_credentialsÚ_auth_tokenÚ_service_idÚweakrefÚproxyÚ_event_emitter)ÚselfÚ
service_idÚregion_nameÚsigning_nameÚsignature_versionÚcredentialsÚevent_emitterÚ
auth_token© r!   úV/var/www/html/pharmsmart-cdr-gen/venv/lib/python3.10/site-packages/botocore/signers.pyÚ__init__G   s   
zRequestSigner.__init__c                 C   ó   | j S r   )r   ©r   r!   r!   r"   r   [   ó   zRequestSigner.region_namec                 C   r$   r   )r   r%   r!   r!   r"   r   _   r&   zRequestSigner.signature_versionc                 C   r$   r   )r   r%   r!   r!   r"   r   c   r&   zRequestSigner.signing_namec                 K   s   |   ||¡S r   )Úsign)r   Úoperation_nameÚrequestÚkwargsr!   r!   r"   Úhandlerg   s   zRequestSigner.handlerÚstandardc              
   C   sR  |}|du r	| j }|du r| j}|  |||j¡}| jjd| j ¡ › d|› �||| j || |d� |tj	kr§|||dœ}	|durB||	d< |j 
di ¡}
|sV|
 
d¡rV|
d |	d	< |
 
d
¡ra|
d
 |	d
< |
 
d¡rl|
d |	d< |
 
d¡dur~|  |	|
d |
d ¡ z
| jdi |	¤Ž}W n tyŸ } z|dkr™t|d�‚|‚d}~ww | |¡ dS dS )a<  Sign a request before it goes out over the wire.

        :type operation_name: string
        :param operation_name: The name of the current operation, e.g.
                               ``ListBuckets``.
        :type request: AWSRequest
        :param request: The request object to be sent over the wire.

        :type region_name: str
        :param region_name: The region to sign the request for.

        :type signing_type: str
        :param signing_type: The type of signing to perform. This can be one of
            three possible values:

            * 'standard'     - This should be used for most requests.
            * 'presign-url'  - This should be used when pre-signing a request.
            * 'presign-post' - This should be used when pre-signing an S3 post.

        :type expires_in: int
        :param expires_in: The number of seconds the presigned url is valid
            for. This parameter is only valid for signing type 'presign-url'.

        :type signing_name: str
        :param signing_name: The name to use for the service when signing.
        Nzbefore-sign.Ú.)r)   r   r   r   Úrequest_signerr(   )r   r   r   ÚexpiresÚsigningÚregionr   r   Úrequest_credentialsÚidentity_cacheÚ	cache_keyr,   ©r   r!   )r   r   Ú_choose_signerÚcontextr   Úemitr   Ú	hyphenizeÚbotocoreÚUNSIGNEDÚgetÚ_resolve_identity_cacheÚget_auth_instancer   r	   Úadd_auth)r   r(   r)   r   Úsigning_typeÚ
expires_inr   Úexplicit_region_namer   r*   Úsigning_contextÚauthÚer!   r!   r"   r'   n   sf   #ÿù

ý

ÿýÿ€úßzRequestSigner.signc                 C   s   ||d< ||d< d S )Nr3   r4   r!   )r   r*   Úcacher4   r!   r!   r"   r=   Ê   s   z%RequestSigner._resolve_identity_cachec                 C   sÂ   dddœ}|  |d¡}|  d¡p| j}|  di ¡}|  d| j¡}|  d| j¡}	|tjur5| |¡s5||7 }| jjd	| j	 
¡ › d
|› �||	||d�\}
}|dur_|}|tjur_| |¡s_||7 }|S )ai  
        Allow setting the signature version via the choose-signer event.
        A value of `botocore.UNSIGNED` means no signing will be performed.

        :param operation_name: The operation to sign.
        :param signing_type: The type of signing that the signer is to be used
            for.
        :return: The signature version to sign with.
        z-presign-postz-query)úpresign-postúpresign-urlÚ Ú	auth_typer0   r   r1   zchoose-signer.r-   )r   r   r   r7   N)r<   r   r   r   r:   r;   Úendswithr   Úemit_until_responser   r9   )r   r(   r@   r7   Úsigning_type_suffix_mapÚsuffixr   r0   r   r   r+   Úresponser!   r!   r"   r6   Î   s8   þÿþ
ûÿþzRequestSigner._choose_signerc                 K   sú   |du r| j }tjj |¡}|du rt|d�‚|jdu r4| jr+t| jt	ƒs+| j 
¡ }n| j}||ƒ}|S |p8| j}	t|ddƒdu rQ|d }
|d }|
 |¡}	|d= d}|	dur[|	 ¡ }||d< |jrt| jdu rltj ¡ ‚||d< ||d	< |d
i |¤Ž}|S )a©  
        Get an auth instance which can be used to sign a request
        using the given signature version.

        :type signing_name: string
        :param signing_name: Service signing name. This is usually the
                             same as the service name, but can differ. E.g.
                             ``emr`` vs. ``elasticmapreduce``.

        :type region_name: string
        :param region_name: Name of the service region, e.g. ``us-east-1``

        :type signature_version: string
        :param signature_version: Signature name like ``v4``.

        :rtype: :py:class:`~botocore.auth.BaseSigner`
        :return: Auth instance to sign a request.
        Nr5   TÚREQUIRES_IDENTITY_CACHEr3   r4   r   r   Úservice_namer!   )r   r:   rD   ÚAUTH_TYPE_MAPSr<   r   ÚREQUIRES_TOKENr   Ú
isinstancer
   Úget_frozen_tokenr   ÚgetattrÚget_credentialsÚget_frozen_credentialsÚREQUIRES_REGIONr   Ú
exceptionsÚNoRegionError)r   r   r   r   r2   r*   ÚclsÚfrozen_tokenrD   r   rF   ÚkeyÚfrozen_credentialsr!   r!   r"   r>   þ   s@   ÿ
ÿ



zRequestSigner.get_auth_instanceé  c                 C   s*   t |ƒ}|  |||d||¡ | ¡  |jS )aÍ  Generates a presigned url

        :type request_dict: dict
        :param request_dict: The prepared request dictionary returned by
            ``botocore.awsrequest.prepare_request_dict()``

        :type operation_name: str
        :param operation_name: The operation being signed.

        :type expires_in: int
        :param expires_in: The number of seconds the presigned url is valid
            for. By default it expires in an hour (3600 seconds)

        :type region_name: string
        :param region_name: The region name to sign the presigned url.

        :type signing_name: str
        :param signing_name: The name to use for the service when signing.

        :returns: The presigned url
        rH   )r   r'   ÚprepareÚurl)r   Úrequest_dictr(   rA   r   r   r)   r!   r!   r"   Úgenerate_presigned_urlE  s   ú	z$RequestSigner.generate_presigned_urlr   ©NN)Nr,   NN)r`   NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   Úpropertyr   r   r   r+   r'   r=   r6   r>   Úget_authrd   r!   r!   r!   r"   r   $   s4    *
ø




ù\4
ûEúr   c                   @   s>   e Zd ZdZdd„ Zddd„Zdd„ Z	dd	d
„Zdd„ ZdS )ÚCloudFrontSigneraà  A signer to create a signed CloudFront URL.

    First you create a cloudfront signer based on a normalized RSA signer::

        import rsa
        def rsa_signer(message):
            private_key = open('private_key.pem', 'r').read()
            return rsa.sign(
                message,
                rsa.PrivateKey.load_pkcs1(private_key.encode('utf8')),
                'SHA-1')  # CloudFront requires SHA-1 hash
        cf_signer = CloudFrontSigner(key_id, rsa_signer)

    To sign with a canned policy::

        signed_url = cf_signer.generate_signed_url(
            url, date_less_than=datetime(2015, 12, 1))

    To sign with a custom policy::

        signed_url = cf_signer.generate_signed_url(url, policy=my_policy)
    c                 C   s   || _ || _dS )a–  Create a CloudFrontSigner.

        :type key_id: str
        :param key_id: The CloudFront Key Pair ID

        :type rsa_signer: callable
        :param rsa_signer: An RSA signer.
               Its only input parameter will be the message to be signed,
               and its output will be the signed content as a binary string.
               The hash algorithm needed by CloudFront is SHA-1.
        N)Úkey_idÚ
rsa_signer)r   rm   rn   r!   r!   r"   r#   ˆ  s   
zCloudFrontSigner.__init__Nc           	      C   sÐ   |duo|du}|du o|du }|s|rd}t |ƒ‚|dur$|  ||¡}t|tƒr.| d¡}|dur=dtt|ƒƒ› �g}nd|  |¡ d¡› �g}|  	|¡}| 
d|  |¡ d¡› �d| j› �g¡ |  ||¡S )a¤  Creates a signed CloudFront URL based on given parameters.

        :type url: str
        :param url: The URL of the protected object

        :type date_less_than: datetime
        :param date_less_than: The URL will expire after that date and time

        :type policy: str
        :param policy: The custom policy, possibly built by self.build_policy()

        :rtype: str
        :return: The signed URL.
        Nz=Need to provide either date_less_than or policy, but not bothÚutf8zExpires=zPolicy=z
Signature=zKey-Pair-Id=)Ú
ValueErrorÚbuild_policyrT   ÚstrÚencodeÚintr   Ú_url_b64encodeÚdecodern   Úextendrm   Ú
_build_url)	r   rb   Údate_less_thanÚpolicyÚboth_args_suppliedÚneither_arg_suppliedrE   ÚparamsÚ	signaturer!   r!   r"   rd   —  s&   



þÿz'CloudFrontSigner.generate_presigned_urlc                 C   s"   d|v rdnd}|| d  |¡ S )Nú?ú&)Újoin)r   Úbase_urlÚextra_paramsÚ	separatorr!   r!   r"   rx   ½  s   zCloudFrontSigner._build_urlc           	      C   s„   t t|ƒƒ}tdd|iiƒ}|rd|vr|d7 }d|i|d< |r,t t|ƒƒ}d|i|d< d|fd	|fg}d
t|ƒgi}tj|dd�S )a0  A helper to build policy.

        :type resource: str
        :param resource: The URL or the stream filename of the protected object

        :type date_less_than: datetime
        :param date_less_than: The URL will expire after the time has passed

        :type date_greater_than: datetime
        :param date_greater_than: The URL will not be valid until this time

        :type ip_address: str
        :param ip_address: Use 'x.x.x.x' for an IP, or 'x.x.x.x/x' for a subnet

        :rtype: str
        :return: The policy in a compact string.
        ÚDateLessThanzAWS:EpochTimeú/z/32zAWS:SourceIpÚ	IpAddressÚDateGreaterThanÚResourceÚ	ConditionÚ	Statement)ú,ú:)Ú
separators)rt   r   r   ÚjsonÚdumps)	r   Úresourcery   Údate_greater_thanÚ
ip_addressÚmomentÚ	conditionÚordered_payloadÚcustom_policyr!   r!   r"   rq   Á  s   zCloudFrontSigner.build_policyc                 C   s"   t  |¡ dd¡ dd¡ dd¡S )Nó   +ó   -ó   =ó   _ó   /ó   ~)Úbase64Ú	b64encodeÚreplace)r   Údatar!   r!   r"   ru   ë  s
   üzCloudFrontSigner._url_b64encodere   )	rf   rg   rh   ri   r#   rd   rx   rq   ru   r!   r!   r!   r"   rl   p  s    
&
ÿ*rl   c                 K   ó   t | d< d S )NÚgenerate_db_auth_token)r£   ©Úclass_attributesr*   r!   r!   r"   Úadd_generate_db_auth_tokenö  ó   r¦   c                 K   s   t | d< t| d< d S )NÚgenerate_db_connect_auth_tokenÚ$generate_db_connect_admin_auth_token)Ú#dsql_generate_db_connect_auth_tokenÚ)dsql_generate_db_connect_admin_auth_tokenr¤   r!   r!   r"   Ú'add_dsql_generate_db_auth_token_methodsú  s   ÿ
ÿr¬   c                 C   st   |}|du r
| j j}d|dœ}ddi |ddœ}d}|› |› d	|› �}	t||	ƒ | jjd||d
dd�}
|
t|ƒd… S )a  Generates an auth token used to connect to a db with IAM credentials.

    :type DBHostname: str
    :param DBHostname: The hostname of the database to connect to.

    :type Port: int
    :param Port: The port number the database is listening on.

    :type DBUsername: str
    :param DBUsername: The username to log in as.

    :type Region: str
    :param Region: The region the database is in. If None, the client
        region will be used.

    :return: A presigned url which can be used as an auth token.
    NÚconnect)ÚActionÚDBUserr†   rI   ÚGET©Úurl_pathÚquery_stringÚheadersÚbodyÚmethodúhttps://r�   é„  zrds-db©r(   rc   r   rA   r   )Úmetar   r   Ú_request_signerrd   Úlen)r   Ú
DBHostnameÚPortÚ
DBUsernameÚRegionr1   r}   rc   ÚschemeÚendpoint_urlÚpresigned_urlr!   r!   r"   r£     s.   þû
ûr£   r¸   c           
      C   sŒ   d}||vrt d|› dd |¡› �d�‚|du r| jj}ddi d	|id
dœ}d}|› |› �}t||ƒ | jj||||dd�}	|	t|ƒd… S )a&  Generate a DSQL database token for an arbitrary action.

    :type Hostname: str
    :param Hostname: The DSQL endpoint host name.

    :type Action: str
    :param Action: Action to perform on the cluster (DbConnectAdmin or DbConnect).

    :type Region: str
    :param Region: The AWS region where the DSQL Cluster is hosted. If None, the client region will be used.

    :type ExpiresIn: int
    :param ExpiresIn: The token expiry duration in seconds (default is 900 seconds).

    :return: A presigned url which can be used as an auth token.
    )Ú	DbConnectÚDbConnectAdminz	Received z! for action but expected one of: z, )ÚreportNr†   rI   r®   r°   r±   r·   Údsqlr¹   )r   r�   rº   r   r   r»   rd   r¼   )
r   ÚHostnamer®   rÀ   Ú	ExpiresInÚpossible_actionsrc   rÁ   rÂ   rÃ   r!   r!   r"   Ú_dsql_generate_db_auth_token9  s2   ÿÿù	
ûrË   c                 C   ó   t | |d||ƒS )a¿  Generate a DSQL database token for the "DbConnect" action.

    :type Hostname: str
    :param Hostname: The DSQL endpoint host name.

    :type Region: str
    :param Region: The AWS region where the DSQL Cluster is hosted. If None, the client region will be used.

    :type ExpiresIn: int
    :param ExpiresIn: The token expiry duration in seconds (default is 900 seconds).

    :return: A presigned url which can be used as an auth token.
    rÄ   ©rË   ©r   rÈ   rÀ   rÉ   r!   r!   r"   rª   l  ó   
ÿrª   c                 C   rÌ   )aÄ  Generate a DSQL database token for the "DbConnectAdmin" action.

    :type Hostname: str
    :param Hostname: The DSQL endpoint host name.

    :type Region: str
    :param Region: The AWS region where the DSQL Cluster is hosted. If None, the client region will be used.

    :type ExpiresIn: int
    :param ExpiresIn: The token expiry duration in seconds (default is 900 seconds).

    :return: A presigned url which can be used as an auth token.
    rÅ   rÍ   rÎ   r!   r!   r"   r«   �  rÏ   r«   c                   @   s&   e Zd Zdd„ Z				ddd„ZdS )ÚS3PostPresignerc                 C   s
   || _ d S r   )r»   )r   r.   r!   r!   r"   r#   —  s   
zS3PostPresigner.__init__Nr`   c                 C   sž   |du ri }|du rg }i }t ƒ }|tj|d� }| tjj¡|d< g |d< |D ]	}	|d  |	¡ q(t|ƒ}
||
j	d< ||
j	d< | j
 d|
|d¡ |
j|d	œS )
a…  Generates the url and the form fields used for a presigned s3 post

        :type request_dict: dict
        :param request_dict: The prepared request dictionary returned by
            ``botocore.awsrequest.prepare_request_dict()``

        :type fields: dict
        :param fields: A dictionary of prefilled form fields to build on top
            of.

        :type conditions: list
        :param conditions: A list of conditions to include in the policy. Each
            element can be either a list or a structure. For example:

            .. code:: python

                [
                    {"acl": "public-read"},
                    {"bucket": "amzn-s3-demo-bucket"},
                    ["starts-with", "$key", "mykey"]
                ]

        :type expires_in: int
        :param expires_in: The number of seconds the presigned post is valid
            for.

        :type region_name: string
        :param region_name: The region name to sign the presigned post to.

        :rtype: dict
        :returns: A dictionary with two elements: ``url`` and ``fields``.
            Url is the url to post to. Fields is a dictionary filled with
            the form fields and respective values to use when submitting the
            post. For example:

            .. code:: python

                {
                    'url': 'https://amzn-s3-demo-bucket.s3.amazonaws.com',
                    'fields': {
                        'acl': 'public-read',
                        'key': 'mykey',
                        'signature': 'mysignature',
                        'policy': 'mybase64 encoded policy'
                    }
                }
        N)ÚsecondsÚ
expirationÚ
conditionszs3-presign-post-fieldszs3-presign-post-policyÚ	PutObjectrG   )rb   Úfields)r   ÚdatetimeÚ	timedeltaÚstrftimer:   rD   ÚISO8601Úappendr   r7   r»   r'   rb   )r   rc   rÕ   rÓ   rA   r   rz   Údatetime_nowÚexpire_dater•   r)   r!   r!   r"   Úgenerate_presigned_postš  s$   7

ÿz'S3PostPresigner.generate_presigned_post)NNr`   N)rf   rg   rh   r#   rÝ   r!   r!   r!   r"   rÐ   –  s    úrÐ   c                 K   r¢   )Nrd   )rd   r¤   r!   r!   r"   Úadd_generate_presigned_urlð  r§   rÞ   r`   c                 C   sØ   |}|}|du r
i }|}|}dt | ƒdœ}	| j}
z| j| }W n ty+   t|d�‚w | jj |¡}| j|||	d�}t	 
| dd¡¡}| j|||	| d�\}}}| j||||	|d	d
�}|durd||d< |
j|||d�S )ax  Generate a presigned url given a client, its method, and arguments

    :type ClientMethod: string
    :param ClientMethod: The client method to presign for

    :type Params: dict
    :param Params: The parameters normally passed to
        ``ClientMethod``.

    :type ExpiresIn: int
    :param ExpiresIn: The number of seconds the presigned url is valid
        for. By default it expires in an hour (3600 seconds)

    :type HttpMethod: string
    :param HttpMethod: The http method to use on the generated url. By
        default, the http method is whatever is used in the method's model.

    :returns: The presigned url
    NT©Úis_presign_requestÚuse_global_endpoint)Úmethod_name©Ú
api_paramsÚoperation_modelr7   ÚBucketrI   ©Úignore_signing_regionF©rä   rå   rÂ   r7   r´   Úset_user_agent_headerr¶   )rc   rA   r(   )Ú_should_use_global_endpointr»   Ú_PY_TO_OP_NAMEÚKeyErrorr   rº   Úservice_modelrå   Ú_emit_api_paramsr   Úis_arnr<   Ú_resolve_endpoint_rulesetÚ_convert_to_request_dictrd   )r   ÚClientMethodÚParamsrÉ   Ú
HttpMethodÚclient_methodr}   rA   Úhttp_methodr7   r.   r(   rå   Úbucket_is_arnrÂ   Úadditional_headersÚ
propertiesrc   r!   r!   r"   rd   ô  s^   þ
ÿýüüú
ýrd   c                 K   r¢   )NrÝ   )rÝ   r¤   r!   r!   r"   Úadd_generate_presigned_postC  r§   rû   c                 C   s  |}|}|}|}	|}
|du ri }n|  ¡ }|	du rg }	dt| ƒdœ}t| jƒ}| jj d¡}| jd|i||d�}t 	| 
dd¡¡}| j|||| d�\}}}| j|||||d	d
�}|	 d|i¡ | d¡ru|	 dd|dtdƒ … g¡ n|	 d|i¡ ||d< |j|||	|
d�S )aw
  Builds the url and the form fields used for a presigned s3 post

    :type Bucket: string
    :param Bucket: The name of the bucket to presign the post to. Note that
        bucket related conditions should not be included in the
        ``conditions`` parameter.

    :type Key: string
    :param Key: Key name, optionally add ${filename} to the end to
        attach the submitted filename. Note that key related conditions and
        fields are filled out for you and should not be included in the
        ``Fields`` or ``Conditions`` parameter.

    :type Fields: dict
    :param Fields: A dictionary of prefilled form fields to build on top
        of. Elements that may be included are acl, Cache-Control,
        Content-Type, Content-Disposition, Content-Encoding, Expires,
        success_action_redirect, redirect, success_action_status,
        and x-amz-meta-.

        Note that if a particular element is included in the fields
        dictionary it will not be automatically added to the conditions
        list. You must specify a condition for the element as well.

    :type Conditions: list
    :param Conditions: A list of conditions to include in the policy. Each
        element can be either a list or a structure. For example:

        .. code:: python

            [
                {"acl": "public-read"},
                ["content-length-range", 2, 5],
                ["starts-with", "$success_action_redirect", ""]
            ]

        Conditions that are included may pertain to acl,
        content-length-range, Cache-Control, Content-Type,
        Content-Disposition, Content-Encoding, Expires,
        success_action_redirect, redirect, success_action_status,
        and/or x-amz-meta-.

        Note that if you include a condition, you must specify
        a valid value in the fields dictionary as well. A value will
        not be added automatically to the fields dictionary based on the
        conditions.

    :type ExpiresIn: int
    :param ExpiresIn: The number of seconds the presigned post
        is valid for.

    :rtype: dict
    :returns: A dictionary with two elements: ``url`` and ``fields``.
        Url is the url to post to. Fields is a dictionary filled with
        the form fields and respective values to use when submitting the
        post. For example:

        .. code:: python

            {
                'url': 'https://amzn-s3-demo-bucket.s3.amazonaws.com',
                'fields': {
                    'acl': 'public-read',
                    'key': 'mykey',
                    'signature': 'mysignature',
                    'policy': 'mybase64 encoded policy'
                }
            }
    NTrß   ÚCreateBucketræ   rã   rI   rç   Fré   Úbucketz${filename}zstarts-withz$keyr^   )rc   rÕ   rÓ   rA   )Úcopyrë   rÐ   r»   rº   rî   rå   rï   r   rð   r<   rñ   rò   rÚ   rK   r¼   rÝ   )r   ræ   ÚKeyÚFieldsÚ
ConditionsrÉ   rý   r^   rÕ   rÓ   rA   r7   Úpost_presignerrå   r}   rø   rÂ   rù   rú   rc   r!   r!   r"   rÝ   G  sd   Hþ
ýüüú

 ürÝ   c                 C   sd   | j jdkrdS | j jj}|r0| dd¡rdS | d¡dkr'| j jjdkr'dS | d¡dkr0dS d	S )
NÚawsFÚuse_dualstack_endpointÚus_east_1_regional_endpointÚregionalz	us-east-1Úaddressing_styleÚvirtualT)rº   Ú	partitionÚconfigÚs3r<   r   )ÚclientÚ	s3_configr!   r!   r"   rë   Ö  s   
ÿþrë   r   )Nr¸   )Nr`   N)NNr`   )%rž   rÖ   r�   r   r:   Úbotocore.authÚbotocore.awsrequestr   r   Úbotocore.compatr   r   Úbotocore.exceptionsr   r   r   r	   Úbotocore.tokensr
   Úbotocore.utilsr   r   r   r   rl   r¦   r¬   r£   rË   rª   r«   rÐ   rÞ   rd   rû   rÝ   rë   r!   r!   r!   r"   Ú<module>   sD     N 
	7
ÿ4
ÿ
ÿZ
ÿO
ÿ 