
    i%                     h   d 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mZm	Z	 ddl
mZmZmZ ddlmZ ddlmZ ddlmZmZmZmZ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$m%Z%  ej&        e'          Z(dZ)di iZ* G d d          Z+ G d de+          Z, G d de-e          Z. G d d          Z/dS )zResolves regions and endpoints.

This module implements endpoint resolution, including resolving endpoints for a
given service and region and resolving the available endpoints for a service
in a specific AWS partition.
    N)Enum)UNSIGNED
xform_name)AUTH_TYPE_MAPSHAS_CRTresolve_auth_scheme_preferenceCRT_SUPPORTED_AUTH_TYPES)EndpointProvider)EndpointProviderErrorEndpointVariantError!InvalidEndpointConfigurationErrorInvalidHostLabelErrorMissingDependencyExceptionNoRegionErrorParamValidationError$UnknownEndpointResolutionBuiltInNameUnknownRegionErrorUnknownSignatureVersionError*UnsupportedS3AccesspointConfigurationErrorUnsupportedS3ConfigurationErrorUnsupportedS3ControlArnError&UnsupportedS3ControlConfigurationError)register_feature_id)ensure_booleaninstance_cachez{service}.{region}.{dnsSuffix}	endpointsc                   *    e Zd ZdZddZd Z	 d	dZdS )
BaseEndpointResolverz3Resolves regions and endpoints. Must be subclassed.Nc                     t           )a7  Resolves an endpoint for a service and region combination.

        :type service_name: string
        :param service_name: Name of the service to resolve an endpoint for
            (e.g., s3)

        :type region_name: string
        :param region_name: Region/endpoint name to resolve (e.g., us-east-1)
            if no region is provided, the first found partition-wide endpoint
            will be used if available.

        :rtype: dict
        :return: Returns a dict containing the following keys:
            - partition: (string, required) Resolved partition name
            - endpointName: (string, required) Resolved endpoint name
            - hostname: (string, required) Hostname to use for this endpoint
            - sslCommonName: (string) sslCommonName to use for this endpoint.
            - credentialScope: (dict) Signature version 4 credential scope
              - region: (string) region name override when signing.
              - service: (string) service name override when signing.
            - signatureVersions: (list<string>) A list of possible signature
              versions, including s3, v4, v2, and s3v4
            - protocols: (list<string>) A list of supported protocols
              (e.g., http, https)
            - ...: Other keys may be included as well based on the metadata
        NotImplementedError)selfservice_nameregion_names      W/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/botocore/regions.pyconstruct_endpointz'BaseEndpointResolver.construct_endpoint>   s
    6 "!    c                     t           )zLists the partitions available to the endpoint resolver.

        :return: Returns a list of partition names (e.g., ["aws", "aws-cn"]).
        r!   r#   s    r&   get_available_partitionsz-BaseEndpointResolver.get_available_partitions[   s
    
 "!r(   awsFc                     t           )a  Lists the endpoint names of a particular partition.

        :type service_name: string
        :param service_name: Name of a service to list endpoint for (e.g., s3)

        :type partition_name: string
        :param partition_name: Name of the partition to limit endpoints to.
            (e.g., aws for the public AWS endpoints, aws-cn for AWS China
            endpoints, aws-us-gov for AWS GovCloud (US) Endpoints, etc.

        :type allow_non_regional: bool
        :param allow_non_regional: Set to True to include endpoints that are
             not regional endpoints (e.g., s3-external-1,
             fips-us-gov-west-1, etc).
        :return: Returns a list of endpoint names (e.g., ["us-east-1"]).
        r!   )r#   r$   partition_nameallow_non_regionals       r&   get_available_endpointsz,BaseEndpointResolver.get_available_endpointsb   s
    & "!r(   N)r,   F)__name__
__module____qualname____doc__r'   r+   r0    r(   r&   r   r   ;   sX        ==" " " ":" " " FK" " " " " "r(   r   c                       e Zd ZdZddgZddZddZd Z	 	 	 dd
Z	 ddZ		 	 	 	 ddZ
d Z	 ddZd Zd Zd Zd Zd Zd Zd Zd	S )EndpointResolverz7Resolves endpoints based on partition endpoint metadatazaws-isoz	aws-iso-bFc                 H    d|vrt          d          || _        || _        dS )a  
        :type endpoint_data: dict
        :param endpoint_data: A dict of partition data.

        :type uses_builtin_data: boolean
        :param uses_builtin_data: Whether the endpoint data originates in the
            package's data directory.
        
partitionsz%Missing "partitions" in endpoint dataN)
ValueError_endpoint_datauses_builtin_data)r#   endpoint_datar=   s      r&   __init__zEndpointResolver.__init__}   s4     },,DEEE+!2r(   r,   c                 x    | j         d         D ]+}|d         |k    r|d         }||vr||         d         c S d S )Nr:   	partitionservicesr   )r<   )r#   r$   r.   rA   rB   s        r&   get_service_endpoints_dataz+EndpointResolver.get_service_endpoints_data   sd    ,\: 	7 	7I%77 ,H8++L)+6666	7 	7r(   c                 `    g }| j         d         D ]}|                    |d                    |S )Nr:   rA   )r<   append)r#   resultrA   s      r&   r+   z)EndpointResolver.get_available_partitions   s=    ,\: 	2 	2IMM)K01111r(   Nc                 :   g }| j         d         D ]}|d         |k    r|d         }||vr||         d         }|D ]]}	|	|d         v }
|r6|
r4|                     ||	         |          }|r|                    |	           D|s|
r|                    |	           ^|S )Nr:   rA   rB   r   regions)r<   _retrieve_variant_datarE   )r#   r$   r.   r/   endpoint_variant_tagsrF   rA   rB   service_endpointsendpoint_nameis_regional_endpointvariant_datas               r&   r0   z(EndpointResolver.get_available_endpoints   s     ,\: 	1 	1I%77 ,H8++ ( 6{ C!2 
1 
1'4	)8L'L$( 1-A 1#'#>#>)-8:O$ $L $ 5m444' 1+? 1MM-000
1 r(   c                     | j         d         D ]T}|d         |k    rF|r:|                     |                    d          |          }|rd|v r
|d         c S J|d         c S Ud S )Nr:   rA   defaults	dnsSuffix)r<   rI   get)r#   r.   rJ   rA   variants        r&   get_partition_dns_suffixz)EndpointResolver.get_partition_dns_suffix   s     ,\: 		2 		2I%77( 2"99!j113H G  4;'#9#9&{3333$[1111 8 tr(   c                 $   |dk    r|r|d}|@d }| j         d         D ]}|d         |k    r|}||                     |||||d          }|S d S | j         d         D ]3}|r|d         | j        v r|                     |||||          }|r|c S 4d S )Ns3z	us-east-1r:   rA   T)r<   _endpoint_for_partition!_UNSUPPORTED_DUALSTACK_PARTITIONS)	r#   r$   r%   r.   use_dualstack_endpointuse_fips_endpointvalid_partitionrA   rF   s	            r&   r'   z#EndpointResolver.construct_endpoint   s    D  & !#%K%"O!0> 0 0	[)^;;&/O*55# *%  4 ,\: 	 	I% +&9: : 11&! F  	 	r(   c                     | j         d         D ]"}|                     ||          r
|d         c S #t          |d          )Nr:   rA   z,No partition found for provided region_name.)r%   	error_msg)r<   _region_matchr   )r#   r%   rA   s      r&   get_partition_for_regionz)EndpointResolver.get_partition_for_region   sd    ,\: 	. 	.I!!)[99 . ----. #D
 
 
 	
r(   c                 V   |d         }|r!|| j         v rd| d}t          dg|          |d                             |t                    }	|d|	v r	|	d         }nt	                      |||	|||d}
||	d	         v r | j        di |
S |                     ||          s|r|	                    d          }|	                    d
d          }|r1|s/t                              d|||           ||
d<    | j        di |
S t                              d||            | j        di |
S d S )NrA   z4Dualstack endpoints are currently not supported for z
 partition	dualstacktagsr]   rB   partitionEndpoint)rA   r$   service_datarL   rY   rZ   r   isRegionalizedTz'Using partition endpoint for %s, %s: %srL   z*Creating a regex based endpoint for %s, %sr6   )	rX   r   rR   DEFAULT_SERVICE_DATAr   _resolver^   LOGdebug)r#   rA   r$   r%   rY   rZ   force_partitionr.   r]   re   resolve_kwargspartition_endpointis_regionalizeds                r&   rW   z(EndpointResolver._endpoint_for_partition   s    #;/"	P$"HHH3&3 3 3  '[MYOOOO !,00.
 
 "l22*+>?#oo% #(((&<!2
 
 ,{333 4=22>222 i55 	3 	3!-!1!12E!F!F*../?FFO! 7/ 7		= &	   3E/$t}66~666II<  
 !4=22>222%	3 	3r(   c                     ||d         v rdS d|v r-t          j        |d                                       |          S dS )NrH   TregionRegexF)recompilematch)r#   rA   r%   s      r&   r^   zEndpointResolver._region_matchA  sJ    )I...4I%%:i677==kJJJur(   c                     |                     dg           }|D ]@}t          |d                   t          |          k    r|                                }|c S Ad S )Nvariantsrc   )rR   setcopy)r#   r>   rc   ru   rS   rF   s         r&   rI   z'EndpointResolver._retrieve_variant_dataH  sh     $$Z44 	 	G76?##s4yy00  1	 	r(   c                 f    g }|r|                     d           |r|                     d           |S )Nra   fips)rE   )r#   rY   rZ   rc   s       r&   _create_tag_listz!EndpointResolver._create_tag_listO  s@    ! 	%KK$$$ 	 KKr(   c                 v    i }|||fD ]0}|                      ||          }|r|                     ||           1|S r1   )rI   _merge_keys)r#   rc   r>   service_defaultspartition_defaultsrF   ru   rS   s           r&   _resolve_variantz!EndpointResolver._resolve_variantW  sZ     &(8:LM 	2 	2H11(DAAG 2  &111r(   c                     |                     di                                |i           }|                     d          rt                              d|           |                     di           }|                     di           }	|                     ||          }
|
rN|                     |
|||	          }|i k    rd| d| }t          |
|          |                     ||           n|}d|vr|d         |d<   |d	         |d	<   ||d
<   |                     ||           |                     |	|           |                     ||d         |||d                   |d<   d|v r(|                     ||d         |||d                   |d<   |S )Nr   
deprecatedz5Client is configured with the deprecated endpoint: %srP   zEndpoint does not exist for z in region rb   rQ   rA   endpointNamehostnamesslCommonName)rR   ri   warningrz   r   r   r|   _expand_template)r#   rA   r$   re   rL   rY   rZ   r>   r}   r~   rc   rF   r]   s                r&   rh   zEndpointResolver._resolvea  s    %((b99==2
 
 \** 	KKG  
 (++J;;&]]:r::$$%;=NOO 	#**m%57I F ||1< 1 1!.1 1  +	JJJJ]F3333"F f$$"+K"8F;'4{!.~ 	)6222+V444!22:;
 
z f$$&*&;&;'{#' 'F?# r(   c                 .    |D ]}||vr||         ||<   d S r1   r6   )r#   	from_datarF   keys       r&   r|   zEndpointResolver._merge_keys  s4     	- 	-C&  'ns	- 	-r(   c                 2    |                     |||          S )N)serviceregionrQ   )format)r#   rA   templater$   rL   rQ   s         r&   r   z!EndpointResolver._expand_template  s&      )  
 
 	
r(   )F)r,   )r,   FNr1   )NNFF)r2   r3   r4   r5   rX   r?   rC   r+   r0   rT   r'   r_   rW   r^   rI   rz   r   rh   r|   r   r6   r(   r&   r8   r8   x   sM       AA)2K(@%3 3 3 37 7 7 7    "   : 59   $ $0 0 0 0d
 
 
  ?3 ?3 ?3 ?3B        @ @ @D- - -

 
 
 
 
r(   r8   c                   F    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdS )EndpointResolverBuiltinszAWS::RegionzAWS::UseFIPSzAWS::UseDualStackzAWS::STS::UseGlobalEndpointzAWS::S3::UseGlobalEndpointzAWS::S3::AcceleratezAWS::S3::ForcePathStylezAWS::S3::UseArnRegionz$AWS::S3::DisableS3ExpressSessionAuthzAWS::S3Control::UseArnRegionz'AWS::S3::DisableMultiRegionAccessPointszSDK::EndpointzAWS::Auth::AccountIdz AWS::Auth::AccountIdEndpointModeN)r2   r3   r4   
AWS_REGIONAWS_USE_FIPSAWS_USE_DUALSTACKAWS_STS_USE_GLOBAL_ENDPOINTAWS_S3_USE_GLOBAL_ENDPOINTAWS_S3_ACCELERATEAWS_S3_FORCE_PATH_STYLEAWS_S3_USE_ARN_REGION#AWS_S3_DISABLE_EXPRESS_SESSION_AUTHAWS_S3CONTROL_USE_ARN_REGIONAWS_S3_DISABLE_MRAPSDK_ENDPOINT
ACCOUNT_IDACCOUNT_ID_ENDPOINT_MODEr6   r(   r&   r   r     sr        J "L , #@ ">-7 4 	/ (
 $B C"L'JAr(   r   c                       e Zd ZdZ	 	 	 ddZd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zed             Zed             Zed             Zd Zd Zd Zd Zd Zd ZdS )EndpointRulesetResolverz5Resolves endpoints using a service's endpoint rulesetTNc
                     t          ||          | _        | j        j        j        | _        || _        || _        || _        || _        || _	        || _
        |	| _        i | _        d S )N)ruleset_datapartition_data)r   	_providerruleset
parameters_param_definitions_service_model	_builtins_client_context_event_emitter_use_ssl_requested_auth_scheme_auth_scheme_preference_instance_cache)
r#   endpoint_ruleset_datar   service_modelbuiltinsclient_contextevent_emitteruse_sslrequested_auth_schemeauth_scheme_preferences
             r&   r?   z EndpointRulesetResolver.__init__  sv     *.)
 
 
 #'."8"C+!-+&;#'=$!r(   c                 B   |i }|i }|                      |||          }t                              d|           	  | j        j        di |}n.# t
          $ r!}|                     ||          }| ||d}~ww xY wt                              d|j                   | j        sD|j        	                    d          r*d|vr&|
                    d|j        dd                    }|
                    d	 |j                                        D             
          }|S )zAInvokes the provider with params defined in the service's rulesetNz-Calling endpoint provider with parameters: %szEndpoint provider result: %szhttps://Endpointzhttp://   )urlc                 &    i | ]\  }}||d          S )r   r6   ).0r   vals      r&   
<dictcomp>z>EndpointRulesetResolver.construct_endpoint.<locals>.<dictcomp>$  s/        (SSV  r(   )headersr6   )_get_provider_paramsri   rj   r   resolve_endpointr   #ruleset_error_to_botocore_exceptionr   r   
startswith_replacer   items)r#   operation_model	call_argsrequest_contextprovider_paramsprovider_resultexbotocore_exceptions           r&   r'   z*EndpointRulesetResolver.construct_endpoint  s    I" O33Y
 
 			;_	
 	
 	
	1=dn=  ! OO % 	1 	1 	1!%!I!IO" " ")(b0	1 			0/2EFFF 	#..z::	 /11-667o1!""577 7  O *22 ,;,C,I,I,K,K   3 
 
 s   A 
A:A55A:c                 *   i }|                      |||          }| j                                        D ]_\  }}|                     |||          }|#|j        |                     |j        |          }||||<   |                     ||           `|S )a  Resolve a value for each parameter defined in the service's ruleset

        The resolution order for parameter values is:
        1. Operation-specific static context values from the service definition
        2. Operation-specific dynamic context values from API parameters
        3. Client-specific context parameters
        4. Built-in values such as region, FIPS usage, ...
        )
param_namer   r   N)builtin_namer   )_get_customized_builtinsr   r   _resolve_param_from_contextbuiltin_resolve_param_as_builtin_register_endpoint_feature_ids)	r#   r   r   r   r   customized_builtinsr   	param_def	param_vals	            r&   r   z,EndpointRulesetResolver._get_provider_params+  s      #;;Y
 
 &*%<%B%B%D%D 	K 	K!J	88% /# 9  I
  Y%6%B ::!*!20 ;  	 $.7
+33J	JJJr(   c                     |                      ||          }||S |                     |||          }||S |                     |||          }||S |                     |          S r1   )&_resolve_param_as_static_context_param'_resolve_param_as_dynamic_context_param)_resolve_param_as_operation_context_param&_resolve_param_as_client_context_param)r#   r   r   r   staticdynamicoperation_context_paramss          r&   r   z3EndpointRulesetResolver._resolve_param_from_contextM  s     <<
 
 M>>
 
 N::OY  	!
 $/++:::FFFr(   c                 V    |                      |          }|                    |          S r1   )_get_static_context_paramsrR   )r#   r   r   static_ctx_paramss       r&   r   z>EndpointRulesetResolver._resolve_param_as_static_context_paramc  s,     !;;OLL $$Z000r(   c                 r    |                      |          }||v r||         }|                    |          S d S r1   )_get_dynamic_context_paramsrR   )r#   r   r   r   dynamic_ctx_paramsmember_names         r&   r   z?EndpointRulesetResolver._resolve_param_as_dynamic_context_parami  sH     "==oNN+++,Z8K==--- ,+r(   c                 z    |                                  }||v r"||         }| j                            |          S d S r1   )_get_client_context_paramsr   rR   )r#   r   client_ctx_paramsclient_ctx_varnames       r&   r   z>EndpointRulesetResolver._resolve_param_as_client_context_paramq  sK     ;;==***!2:!>'++,>??? +*r(   c                 b    |j         }||v r#||         d         }t          j        ||          S d S )Npath)operation_context_parametersjmespathsearch)r#   r   r   r   operation_ctx_paramsr   s         r&   r   zAEndpointRulesetResolver._resolve_param_as_operation_context_paramw  sB      /K---'
3F;D?4333 .-r(   c                     |t           j                                        vrt          |          |                    |          }t          |          r
 |            S |S )Nname)r   __members__valuesr   rR   callable)r#   r   r   r   s       r&   r   z1EndpointRulesetResolver._resolve_param_as_builtin  s`    7CJJLLLL6LIIII,,|,,G 	799r(   c                 $    d |j         D             S )z=Mapping of param names to static param value for an operationc                 (    i | ]}|j         |j        S r6   )r   valuer   params     r&   r   zFEndpointRulesetResolver._get_static_context_params.<locals>.<dictcomp>  s.     
 
 
 J
 
 
r(   )static_context_parametersr#   r   s     r&   r   z2EndpointRulesetResolver._get_static_context_params  s&    
 
(B
 
 
 	
r(   c                 $    d |j         D             S )z7Mapping of param names to member names for an operationc                 (    i | ]}|j         |j        S r6   )r   r   r   s     r&   r   zGEndpointRulesetResolver._get_dynamic_context_params.<locals>.<dictcomp>  s/     
 
 
 J)
 
 
r(   )context_parametersr   s     r&   r   z3EndpointRulesetResolver._get_dynamic_context_params  s&    
 
(;
 
 
 	
r(   c                 .    d | j         j        D             S )z7Mapping of param names to client configuration variablec                 B    i | ]}|j         t          |j                   S r6   )r   r   r   s     r&   r   zFEndpointRulesetResolver._get_client_context_params.<locals>.<dictcomp>  s6     
 
 
 J
5:..
 
 
r(   )r   client_context_parametersr*   s    r&   r   z2EndpointRulesetResolver._get_client_context_params  s)    
 
,F
 
 
 	
r(   c                     | j         j                                        }t          j        | j                  }| j                            d| ||||           |S )Nzbefore-endpoint-resolution.)r   modelparamscontext)r   
service_id	hyphenizerw   r   r   emit)r#   r   r   r   r	  r   s         r&   r   z0EndpointRulesetResolver._get_customized_builtins  sl     (3==??
"i77  6*66(!# 	! 	
 	
 	
 #"r(   c                     t          |t                    rt          |          dk    rt          d          t                              dd                    d |D                        j                    j        t          k    rdi fS d |D             } fd|D             } j        4	 t           fd
|D                       \  }}n# t          $ r d	i fcY S w xY w j        A j                            d          } fd|D             }t          ||          }||         }n	 t          d |D                       \  }}nq# t          $ rd d}d |D             }t          st          d |D                       }|rt!          d          t#          d                    |                    w xY wi }	d|v r|d         |	d<   n;d|v r7t          |d                   dk    rd                    |d                   |	d<   d|v r|	                    |d                    d|v rt'          |d                   |	d<   t                              d|d         ||	           ||	fS )a  Convert an Endpoint's authSchemes property to a signing_context dict

        :type auth_schemes: list
        :param auth_schemes: A list of dictionaries taken from the
            ``authSchemes`` property of an Endpoint object returned by
            ``EndpointProvider``.

        :rtype: str, dict
        :return: Tuple of auth type string (to be used in
            ``request_context['auth_type']``) and signing context dict (for use
            in ``request_context['signing']``).
        r   z&auth_schemes must be a non-empty list.z_Selecting from endpoint provider's list of auth schemes: %s. User selected auth scheme is: "%s"z, c                 @    g | ]}d |                     d           d S )"r   )rR   r   ss     r&   
<listcomp>zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>  s.    BBB+155==+++BBBr(   nonec                 P    g | ]#}|d                               d          d         $S r   #)splitr  s     r&   r  zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>  s:     #
 #
 #
)*AfIOOC  $#
 #
 #
r(   c                 R    g | ]#}i |d                      |d                    i$S r   )_strip_sig_prefix)r   schemer#   s     r&   r  zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>  sK     
 
 
 GvFvt55fVnEEFF
 
 
r(   Nc              3   l   K   | ].}                     j        |d                    #j        |fV  /dS r   N)._does_botocore_authname_match_ruleset_authnamer   r   r  r#   s     r&   	<genexpr>zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  sa       $ $JJ3QvY $0!4$ $ $ $ $ $r(   ,c                 z    i | ]7}                     |d                              d          d                   |8S r  )r  r  r  s     r&   r   zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<dictcomp>  sN     ) ) ) &&qys';';B'?@@!) ) )r(   c              3   H   K   | ]}|d          t           v |d          |fV  dS r  )r   r  s     r&   r  zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  sE       $ $yN22 vYN2222$ $r(   Fc                     g | ]
}|d          S r   r6   r  s     r&   r  zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>  s    $E$E$E1QvY$E$E$Er(   c              3   (   K   | ]}|t           v V  d S r1   r	   )r   r  s     r&   r  zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  s<       + +" "::+ + + + + +r(   zbThis operation requires an additional dependency. Use pip install botocore[crt] before proceeding.msg)signature_versionsigningRegionr   signingRegionSetsigningName)signing_namedisableDoubleEncodingz?Selected auth type "%s" as "%s" with signing context params: %sr   )
isinstancelistlen	TypeErrorri   rj   joinr   r   nextStopIterationr   r  r   r   anyr   r   updater   )
r#   auth_schemesavailable_ruleset_namesr   r  prefsauth_schemes_by_auth_typefixable_with_crtauth_type_optionssigning_contexts
   `         r&   auth_schemes_to_signing_ctxz3EndpointRulesetResolver.auth_schemes_to_signing_ctx  s    ,-- 	F\1B1Ba1G1GDEEE		1IIBB\BBBCC'		
 	
 	
 &(222:#
 #
.:#
 #
 #

 
 
 
&
 
 
 &2   $ $ $ $ $)$ $ $    ff !       Rx	 
 )5066s;;E) ) ) )%) ) )% 2. D /t4FF# $ $)$ $ $    ff
 !    $) $E$E$E$E$E! '* + +&7+ + + ( ($
 $ 4L   
 7*.))4E*F*F   %, f$$(.(?OH%%6))6,-..22,/HH-.- -) F""""}0E"FFF"f,,7E./8 8O34 			M6N		
 	
 	
 _$$s   -C CC)E A.F4c                 D    |                     d          r
|dd         n|S )z6Normalize auth type names by removing any "sig" prefixsig   N)r   )r#   	auth_names     r&   r  z)EndpointRulesetResolver._strip_sig_prefix  s'     ) 4 4U ; ;Jy}}Jr(   c                     |                      |          }|                    d          d         }|dk    r|                    d          r
|dd         }||k    S )a\  
        Whether a valid string provided as signature_version parameter for
        client construction refers to the same auth methods as a string
        returned by the endpoint ruleset provider. This accounts for:

        * The ruleset prefixes auth names with "sig"
        * The s3 and s3control rulesets don't distinguish between v4[a] and
          s3v4[a] signers
        * The v2, v3, and HMAC v1 based signers (s3, s3-*) are botocore legacy
          features and do not exist in the rulesets
        * Only characters up to the first dash are considered

        Example matches:
        * v4, sigv4
        * v4, v4
        * s3v4, sigv4
        * s3v7, sigv7 (hypothetical example)
        * s3v4a, sigv4a
        * s3v4-query, sigv4

        Example mismatches:
        * v4a, sigv4
        * s3, sigv4
        * s3-presign-post, sigv4
        -r   rV      N)r  r  r   )r#   botonamersnames      r&   r  zFEndpointRulesetResolver._does_botocore_authname_match_ruleset_authname"  sc    4 ''//>>#&&q)t 3 3D 9 9|H!!r(   c                 t   |j                             d          }|dS |                    d          r?	 |                    d          d         }n# t          $ r |}Y nw xY wt          |          S | j        j        }|dk    r|dk    s|d	k    rt          |
          S |                    d          si|                    d          sT|                    d          s?|                    d          s*|                    d          s|                    d          rt          |
          S |
                                                    d          rt          |          S |dk    r|                    d          r&|                    d          }t          ||          S |                    d          s|                    d          rt          |
          S |dk    rt          |          S |dk    r;|                    d          rt          |
          S |dk    rt          |
          S dS )zAttempts to translate ruleset errors to pre-existing botocore
        exception types by string matching exception strings.
        r&  NzInvalid region in ARN: `   )labelrV   z/S3 Object Lambda does not support S3 Acceleratez#Accelerate cannot be used with FIPSr%  zS3 Outposts does not supportzS3 MRAP does not supportz!S3 Object Lambda does not supportzAccess Points do not supportzInvalid configuration:z#Client was configured for partitionzinvalid arn:)report	s3controlzInvalid ARN:Bucket)arnr&  z!AccountId is required but not seteventszUInvalid Configuration: FIPS is not supported with EventBridge multi-region endpoints.z&EndpointId must be a valid host label.)kwargsrR   r   r  
IndexErrorr   r   r$   r   r   lowerr   r   r   r   )r#   ruleset_exceptionr  r&  rJ  r$   rN  s          r&   r   z;EndpointRulesetResolver.ruleset_error_to_botocore_exceptionB  s     &**511;F>>344 	6		#q)   (u5555*74HHH???63????=>>K>>"<==K >>"EFFK >>"@AA	K
 >>":;;K >>"GHHK BcJJJJyy{{%%n55 8+37777;&&~~n-- Fjj**3EEEE~~677 G3>>5< < G >#FFFF999+377778##~~6  B 9SAAAA>>>8SAAAAts   A A A c                     |dk    r&t          d|                                            d S |dk    rt          d           d S d S )NAccountIdEndpointModeACCOUNT_ID_MODE_	AccountIdRESOLVED_ACCOUNT_ID)r   upper)r#   r   r   s      r&   r   z6EndpointRulesetResolver._register_endpoint_feature_idsy  s]    000 F9??3D3D F FGGGGG;&& 566666 '&r(   )TNN)r2   r3   r4   r5   r?   r'   r   r   r   r   r   r   r   r   r   r   r   r   r=  r  r  r   r   r6   r(   r&   r   r     sm       ?? "#" " " "44 4 4l     DG G G,1 1 1. . .@ @ @4 4 4   
 
 ^
 
 
 ^
 
 
 ^
# # #n% n% n%`K K K" " "@5 5 5n7 7 7 7 7r(   r   )0r5   rw   loggingrq   enumr   r   botocorer   r   botocore.authr   r   r   botocore.crtr
   botocore.endpoint_providerr   botocore.exceptionsr   r   r   r   r   r   r   r   r   r   r   r   r   r   botocore.useragentr   botocore.utilsr   r   	getLoggerr2   ri   DEFAULT_URI_TEMPLATErg   r   r8   strr   r   r6   r(   r&   <module>rf     st      				        ) ) ) ) ) ) ) )         
 2 1 1 1 1 1 7 7 7 7 7 7                                 3 2 2 2 2 2 9 9 9 9 9 9 9 9g!!7 #R( :" :" :" :" :" :" :" :"zu
 u
 u
 u
 u
+ u
 u
 u
p	%B %B %B %B %BsD %B %B %BPe7 e7 e7 e7 e7 e7 e7 e7 e7 e7r(   