+
    šÜiî³  ã                   óÌ  € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ^ RI
Ht ^ RIHtHt ^ RIHt ^ RIHtHtHtHtHtHtHtHtHtHtHt ^ RIHtHtH t H!t! ^ RI"H#t#H$t$H%t% ]PL                  ! ]'4      t(R	t)RIt*R
t+Rt,. RJOt-Rt.Rt/R t0R t1 ! R R4      t2 ! R R]24      t3 ! R R]24      t4 ! R R]24      t5 ! R R]24      t6 ! R R]64      t7 ! R R]74      t8 ! R R]84      t9 ! R  R!]84      t: ! R" R#]64      t; ! R$ R%];4      t< ! R& R']64      t= ! R( R)]24      t> ! R* R+]>4      t? ! R, R-]>4      t@ ! R. R/]34      tAR0 tBR1 tCR2]4R3]5R4]5R5]>R6]?R7]@R8]=R9]8R:]:R;]9R<]A/tD]'       d   ^ R=IEHFtF ]DP�                  ]F4       M]DP�                  R>]6R?];R@]7RA]</4       RBR>RCRDRER<RFRG/tH]HP“                  4        U Uu/ uF  w  rV P•                  RH4      RK,          VbK   	  upp tKR# u upp i )Lé    N)ÚMapping©Ú
formatdate)Úsha1Úsha256)Ú
itemgetter)ÚHAS_CRTÚMD5_AVAILABLEÚHTTPHeadersÚencodebytesÚensure_unicodeÚget_current_datetimeÚparse_qsÚquoteÚunquoteÚurlsplitÚ
urlunsplit)ÚNoAuthTokenErrorÚNoCredentialsErrorÚUnknownSignatureVersionErrorÚ UnsupportedSignatureVersionError)Úis_valid_ipv6_endpoint_urlÚnormalize_url_pathÚpercent_encode_sequenceÚ@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855z%Y-%m-%dT%H:%M:%SZz%Y%m%dT%H%M%SZzUNSIGNED-PAYLOADz"STREAMING-UNSIGNED-PAYLOAD-TRAILERc                 ó   € \        V 4      pVP                  p\        V 4      '       d   R V R2pR^PRR/pVP                  e<   VP                  VP	                  VP
                  4      8w  d   V RVP                   2pV# )Ú[Ú]ÚhttpÚhttpsi»  Ú:)r   Úhostnamer   ÚportÚgetÚscheme)ÚurlÚ	url_partsÚhostÚdefault_portss   &   Ú//usr/lib/python3/dist-packages/botocore/auth.pyÚ_host_from_urlr+   J   s„   € ô
 ˜“€IØ×Ñ€DÜ! #×&Ò&Ø�4�&˜ˆ{ˆà�Ø�ð€Mð ‡~�~Ò!Ø�>‰>˜]×.Ñ.¨y×/?Ñ/?Ó@Ô@Ø�V˜1˜YŸ^™^Ð,Ð-ˆDØ€Kó    c                 óð   € V P                   p\        V\        4      '       d(   \        P                  ! VP                  R 4      4      pV# \        V\        4      '       d   \        P                  ! V4      pV# ©úutf-8)ÚdataÚ
isinstanceÚbytesÚjsonÚloadsÚdecodeÚstr)Úrequestr0   s   & r*   Ú_get_body_as_dictr8   ]   sZ   € ð
 �<‰<€DÜ�$œ×ÒÜ�zŠz˜$Ÿ+™+ gÓ.Ó/ˆð €Kô 
�Dœ#×	Ò	Ü�zŠz˜$ÓˆØ€Kr,   c                   ó.   a € ] tR t^jt o RtRtR tRtV tR# )Ú
BaseSignerFc                ó   € \        R 4      h)Úadd_auth)ÚNotImplementedError©Úselfr7   s   &&r*   r<   ÚBaseSigner.add_authn   s   € Ü! *Ó-Ð-r,   © N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚREQUIRES_REGIONÚREQUIRES_TOKENr<   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r*   r:   r:   j   s   ø‡ € Ø€OØ€N÷.ð .r,   r:   c                   ó,   a € ] tR t^rt o Rt R tRtV tR# )ÚTokenSignerTc                ó   € Wn         R # ©N©Ú
auth_token)r?   rQ   s   &&r*   Ú__init__ÚTokenSigner.__init__x   s   € Ø$Žr,   rP   N)rB   rC   rD   rE   rG   rR   rH   rI   rJ   s   @r*   rM   rM   r   s   ø‡ € Ø€Nð÷%ð %r,   rM   c                   ó6   a € ] tR t^|t o RtR tR tR tRtV t	R# )Ú	SigV2Authz#
Sign a request with Signature V2.
c                ó   € Wn         R # rO   ©Úcredentials©r?   rX   s   &&r*   rR   ÚSigV2Auth.__init__�   ó   € Ø&Ör,   c                ól  € \         P                  R 4       \        VP                  4      pVP                  p\        V4      ^ 8X  d   RpVP                   RVP                   RV R2p\        P                  ! V P                  P                  P                  R4      \        R7      p. p\        V4       Fk  pVR8X  d   K  \        W(,          4      p	\!        VP                  R4      RR7      p
\!        V	P                  R4      RR7      pVP#                  V
 R	V 24       Km  	  R
P%                  V4      pW\,          p\         P                  RV4       VP'                  VP                  R4      4       \(        P*                  ! VP-                  4       4      P/                  4       P1                  R4      pWÍ3# )z$Calculating signature using v2 auth.Ú/Ú
r/   ©Ú	digestmodÚ	SignatureÚ ©Úsafez-_~Ú=Ú&zString to sign: %s)ÚloggerÚdebugr   r&   ÚpathÚlenÚmethodÚnetlocÚhmacÚnewrX   Ú
secret_keyÚencoder   Úsortedr6   r   ÚappendÚjoinÚupdateÚbase64Ú	b64encodeÚdigestÚstripr5   )r?   r7   ÚparamsÚsplitri   Ústring_to_signÚlhmacÚpairsÚkeyÚvalueÚ
quoted_keyÚquoted_valueÚqsÚb64s   &&&           r*   Úcalc_signatureÚSigV2Auth.calc_signature„   s_  € Ü�‰Ð;Ô<Ü˜Ÿ™Ó%ˆØ�z‰zˆÜˆt‹9˜Œ>ØˆDØ#ŸN™NÐ+¨2¨e¯l©l¨^¸2¸d¸VÀ2ÐFˆÜ—’Ø×Ñ×'Ñ'×.Ñ.¨wÓ7Ä6ô
ˆð ˆÜ˜&–>ˆCð �kÔ!ÙÜ˜�Ó$ˆEÜ˜sŸz™z¨'Ó2¸Ô<ˆJÜ  §¡¨gÓ!6¸UÔCˆLØ�L‰L˜J˜< q¨¨Ð7Ö8ñ "ð �X‰X�e‹_ˆØÕˆÜ�‰Ð)¨>Ô:Ø�‰�^×*Ñ*¨7Ó3Ô4Ü×Ò˜uŸ|™|›~Ó.×4Ñ4Ó6×=Ñ=¸gÓFˆØˆyÐr,   c                óÌ  € V P                   f   \        4       hVP                  '       d   VP                  pMVP                  pV P                   P                  VR&   RVR&   RVR&   \
        P                  ! \        \
        P                  ! 4       4      VR&   V P                   P                  '       d   V P                   P                  VR&   V P                  W4      w  r4WBR&   V# )	NÚAWSAccessKeyIdÚ2ÚSignatureVersionÚ
HmacSHA256ÚSignatureMethodÚ	TimestampÚSecurityTokenra   )rX   r   r0   ry   Ú
access_keyÚtimeÚstrftimeÚISO8601ÚgmtimeÚtokenr„   )r?   r7   ry   r‚   Ú	signatures   &&   r*   r<   ÚSigV2Auth.add_auth    sÅ   € ð ×ÑÒ#Ü$Ó&Ð&Ø�<�<ˆ<à—\‘\‰Fð —^‘^ˆFØ#'×#3Ñ#3×#>Ñ#>ˆÐÑ Ø%(ˆÐ!Ñ"Ø$0ˆÐ Ñ!Ü"Ÿmšm¬G´T·[²[³]ÓCˆˆ{ÑØ×Ñ×!×!Ð!Ø&*×&6Ñ&6×&<Ñ&<ˆF�?Ñ#Ø×+Ñ+¨GÓ<‰ˆØ'ˆ{ÑØˆr,   rW   N)
rB   rC   rD   rE   Ú__doc__rR   r„   r<   rH   rI   rJ   s   @r*   rU   rU   |   s   ø‡ € ñò'ò÷8ð r,   rU   c                   ó,   a € ] tR t^¹t o R tR tRtV tR# )Ú	SigV3Authc                ó   € Wn         R # rO   rW   rY   s   &&r*   rR   ÚSigV3Auth.__init__º   r[   r,   c                ó:  € V P                   f   \        4       hRVP                  9   d   VP                  R \        RR7      VP                  R&   V P                   P                  '       dB   RVP                  9   d   VP                  R V P                   P                  VP                  R&   \
        P                  ! V P                   P                  P                  R4      \        R7      pVP                  VP                  R,          P                  R4      4       \        VP                  4       4      P                  4       pRV P                   P                   RVP                  R4       2pR	VP                  9   d   VP                  R	 WAP                  R	&   R # )
NÚDateT©ÚusegmtúX-Amz-Security-Tokenr/   r_   zAWS3-HTTPS AWSAccessKeyId=z ,Algorithm=HmacSHA256,Signature=zX-Amzn-Authorization)rX   r   Úheadersr   r“   rm   rn   ro   rp   r   rt   r   rw   rx   rŽ   r5   )r?   r7   Únew_hmacÚencoded_signaturer”   s   &&   r*   r<   ÚSigV3Auth.add_auth½   sM  € Ø×ÑÒ#Ü$Ó&Ð&Ø�W—_‘_Ô$Ø—‘ Ð'Ü",°DÔ"9ˆ�‰˜ÑØ×Ñ×!×!Ð!Ø%¨¯©Ô8Ø—O‘OÐ$:Ð;Ø6:×6FÑ6F×6LÑ6LˆG�O‰OÐ2Ñ3Ü—8’8Ø×Ñ×'Ñ'×.Ñ.¨wÓ7Ä6ô
ˆð 	�‰˜Ÿ™¨Õ/×6Ñ6°wÓ?Ô@Ü'¨¯©Ó(9Ó:×@Ñ@ÓBÐà(¨×)9Ñ)9×)DÑ)DÐ(Eð F.Ø.?×.FÑ.FÀwÓ.OÐ-PðRð 	ð " W§_¡_Ô4Ø—‘Ð 6Ð7Ø2;�‰Ð.Ó/r,   rW   N)rB   rC   rD   rE   rR   r<   rH   rI   rJ   s   @r*   r˜   r˜   ¹   s   ø‡ € ò'÷<ð <r,   r˜   c                   ó°   a € ] tR t^Õt o RtRtR tRR ltR tR t	R t
R tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tRtV tR# )Ú	SigV4Authz#
Sign a request with Signature V4.
Tc                ó*   € Wn         W0n        W n        R # rO   )rX   Ú_region_nameÚ_service_name©r?   rX   Úservice_nameÚregion_names   &&&&r*   rR   ÚSigV4Auth.__init__Ü   s   € Ø&Ôð (ÔØ)Ör,   c                óú   € V'       d;   \         P                  ! WP                  R 4      \        4      P	                  4       pV# \         P                  ! WP                  R 4      \        4      P                  4       pV# r.   )rm   rn   rp   r   Ú	hexdigestrw   )r?   r~   ÚmsgÚhexÚsigs   &&&& r*   Ú_signÚSigV4Auth._signä   sW   € ßÜ—(’(˜3§
¡
¨7Ó 3´VÓ<×FÑFÓHˆCð ˆ
ô —(’(˜3§
¡
¨7Ó 3´VÓ<×CÑCÓEˆCØˆ
r,   c                óà   € \        4       pVP                  P                  4        F&  w  r4VP                  4       pV\        9  g   K"  WBV&   K(  	  RV9  d   \        VP                  4      VR&   V# )zS
Select the headers from the request that need to be included
in the StringToSign.
r(   )r   r    ÚitemsÚlowerÚSIGNED_HEADERS_BLACKLISTr+   r&   )r?   r7   Ú
header_mapÚnamer   Úlnames   &&    r*   Úheaders_to_signÚSigV4Auth.headers_to_signë   se   € ô
 !“]ˆ
Ø"Ÿ?™?×0Ñ0Ö2‰KˆDØ—J‘J“LˆEØÔ4Ö4Ø$)˜5Ó!ñ 3ð ˜Ô#ô "0°·±Ó!<ˆJ�vÑØÐr,   c                ó¤   € VP                   '       d   V P                  VP                   4      # V P                  \        VP                  4      4      # rO   )ry   Ú_canonical_query_string_paramsÚ_canonical_query_string_urlr   r&   r>   s   &&r*   Úcanonical_query_stringÚ SigV4Auth.canonical_query_stringû   s<   € ð
 �>�>ˆ>Ø×6Ñ6°w·~±~ÓFÐFà×3Ñ3´H¸W¿[¹[Ó4IÓJÐJr,   c           	     óJ  € . p\        V\        4      '       d   VP                  4       pV F7  w  r4VP                  \	        VR R7      \	        \        V4      R R7      34       K9  	  . p\        V4       F  w  r4VP                  V RV 24       K  	  RP                  V4      pV# )z-_.~rc   re   rf   )r1   r   rµ   rr   r   r6   rq   rs   )r?   ry   Úkey_val_pairsr~   r   Úsorted_key_valsrÀ   s   &&     r*   r¾   Ú(SigV4Auth._canonical_query_string_params  s›   € àˆÜ�fœg×&Ò&Ø—\‘\“^ˆFÛ ‰JˆCØ× Ñ Ü�s Ô(¬%´°E³
ÀÔ*HÐIöñ !ð ˆô ! Ö/‰JˆCØ×"Ñ" c U¨!¨E¨7Ð#3Ö4ñ 0à!$§¡¨/Ó!:ÐØ%Ð%r,   c                ó<  € R pVP                   '       dˆ   . pVP                   P                  R4       F)  pVP                  R4      w  rVpVP                  WW34       K+  	  . p\	        V4       F  w  rWVP                  V RV 24       K  	  RP                  V4      pV# )rb   rf   re   )Úqueryrz   Ú	partitionrr   rq   rs   )	r?   ÚpartsrÀ   rÃ   Úpairr~   Ú_r   rÄ   s	   &&       r*   r¿   Ú%SigV4Auth._canonical_query_string_url  s™   € Ø!#ÐØ�;�;ˆ;àˆMØŸ™×)Ñ)¨#Ö.�Ø $§¡¨sÓ 3‘�˜Ø×$Ñ$ c \Ö2ñ /ð !ˆOô % ]Ö3‘
�Ø×&Ñ&¨#¨¨a°¨wÐ'7Ö8ñ 4à%(§X¡X¨oÓ%>Ð"Ø%Ð%r,   c                óö   a € . p\        \        V4      4      pV FL  pRP                  V 3R lVP                  V4       4       4      pVP	                  V R\        V4       24       KN  	  RP                  V4      # )zå
Return the headers that need to be included in the StringToSign
in their canonical form by converting all header keys to lower
case, sorting them in alphabetical order and then joining
them into a string, separated by newlines.
Ú,c              3   óF   <"  € T F  pSP                  V4      x € K  	  R # 5irO   )Ú_header_value)Ú.0Úvr?   s   & €r*   Ú	<genexpr>Ú.SigV4Auth.canonical_headers.<locals>.<genexpr>0  s#   øé € ð Ù/K¨!�×"Ñ" 1×%Ð%Ó/Kùs   ƒ!r!   r^   )rq   Úsetrs   Úget_allrr   r   )r?   r»   r    Úsorted_header_namesr~   r   s   f&    r*   Úcanonical_headersÚSigV4Auth.canonical_headers&  sz   ø€ ð ˆÜ$¤S¨Ó%9Ó:ÐÛ&ˆCØ—H‘Hô Ø/>×/FÑ/FÀsÔ/Kóó ˆEð �N‰N˜c˜U !¤N°5Ó$9Ð#:Ð;Ö<ñ	 'ð
 �y‰y˜Ó!Ð!r,   c                ó@   € R P                  VP                  4       4      # )Ú )rs   rz   )r?   r   s   &&r*   rÐ   ÚSigV4Auth._header_value6  s   € ð �x‰x˜Ÿ™›Ó&Ð&r,   c                óZ   € \        R  \        V4       4       4      pRP                  V4      # )c              3   ó\   "  € T F"  qP                  4       P                  4       x € K$  	  R # 5irO   )r¶   rx   )rÑ   Úns   & r*   rÓ   Ú+SigV4Auth.signed_headers.<locals>.<genexpr>?  s    é € ÐIÑ4H¨qŸ™›Ÿ™×*Ð*Ó4Hùs   ‚*,Ú;)rq   rÕ   rs   )r?   r»   r    s   && r*   Úsigned_headersÚSigV4Auth.signed_headers>  s&   € ÜÑI´C¸Ô4HÓIÓIˆØ�x‰x˜Ó Ð r,   c                ó´   € VP                   P                  R / 4      pVP                  R4      p\        V\        4      ;'       d    VP                  R4      R8H  # )ÚchecksumÚrequest_algorithmÚinÚtrailer)Úcontextr$   r1   Údict)r?   r7   Úchecksum_contextÚ	algorithms   &&  r*   Ú_is_streaming_checksum_payloadÚ(SigV4Auth._is_streaming_checksum_payloadB  sM   € Ø"Ÿ?™?×.Ñ.¨z¸2Ó>ÐØ$×(Ñ(Ð)<Ó=ˆ	Ü˜)¤TÓ*×OÐO¨y¯}©}¸TÓ/BÀiÑ/OÐOr,   c                ó  € V P                  V4      '       d   \        # V P                  V4      '       g   \        # VP                  pV'       d™   \        VR 4      '       d‡   VP                  4       p\        P                  ! VP                  \        4      p\        4       p\        VR4       F  pVP                  V4       K  	  VP                  4       pVP                  V4       V# V'       d   \        V4      P                  4       # \         # )Úseekr,   )rí   Ú"STREAMING_UNSIGNED_PAYLOAD_TRAILERÚ_should_sha256_sign_payloadÚUNSIGNED_PAYLOADÚbodyÚhasattrÚtellÚ	functoolsÚpartialÚreadÚPAYLOAD_BUFFERr   Úiterrt   r®   rð   ÚEMPTY_SHA256_HASH)r?   r7   Úrequest_bodyÚpositionÚread_chunksizerå   ÚchunkÚhex_checksums   &&      r*   ÚpayloadÚSigV4Auth.payloadG  sÚ   € Ø×.Ñ.¨w×7Ò7Ü5Ð5Ø×1Ñ1°'×:Ò:ô $Ð#Ø—|‘|ˆßœG L°&×9Ò9Ø#×(Ñ(Ó*ˆHÜ&×.Ò.Ø×!Ñ!¤>óˆNô “xˆHÜ˜n¨cÖ2�Ø—‘ Ö&ñ 3à#×-Ñ-Ó/ˆLØ×Ñ˜hÔ'ØÐßô ˜,Ó'×1Ñ1Ó3Ð3ä$Ð$r,   c                ó€   € VP                   P                  R 4      '       g   R# VP                  P                  RR4      # )r    TÚpayload_signing_enabled)r&   Ú
startswithré   r$   r>   s   &&r*   rò   Ú%SigV4Auth._should_sha256_sign_payloada  s4   € à�{‰{×%Ñ% g×.Ò.Ùð
 �‰×"Ñ"Ð#<¸dÓCÐCr,   c                óV  € VP                   P                  4       .pV P                  \        VP                  4      P
                  4      pVP                  V4       VP                  V P                  V4      4       V P                  V4      pVP                  V P                  V4      R ,           4       VP                  V P                  V4      4       RVP                  9   d   VP                  R,          pMV P                  V4      pVP                  V4       R P                  V4      # )r^   úX-Amz-Content-SHA256)rk   ÚupperÚ_normalize_url_pathr   r&   ri   rr   rÀ   r»   rØ   râ   r    r  rs   )r?   r7   Úcrri   r»   Úbody_checksums   &&    r*   Úcanonical_requestÚSigV4Auth.canonical_requestk  sÞ   € Ø�n‰n×"Ñ"Ó$Ð%ˆØ×'Ñ'¬°·±Ó(=×(BÑ(BÓCˆØ
�	‰	�$ŒØ
�	‰	�$×-Ñ-¨gÓ6Ô7Ø×.Ñ.¨wÓ7ˆØ
�	‰	�$×(Ñ(¨Ó9¸DÕ@ÔAØ
�	‰	�$×%Ñ% oÓ6Ô7Ø! W§_¡_Ô4Ø#ŸO™OÐ,BÕC‰Mà ŸL™L¨Ó1ˆMØ
�	‰	�-Ô Ø�y‰y˜‹}Ðr,   c                ó2   € \        \        V4      R R7      pV# )z/~rc   )r   r   )r?   ri   Únormalized_paths   && r*   r  ÚSigV4Auth._normalize_url_pathz  s   € ÜÔ 2°4Ó 8¸tÔDˆØÐr,   c                ó2  € V P                   P                  .pVP                  VP                  R ,          R,          4       VP                  V P                  4       VP                  V P
                  4       VP                  R4       RP                  V4      # ©Ú	timestampºr   é   NÚaws4_requestr]   )rX   rŽ   rr   ré   r§   r¨   rs   ©r?   r7   Úscopes   && r*   r  ÚSigV4Auth.scope~  sn   € Ø×!Ñ!×,Ñ,Ð-ˆØ�‰�W—_‘_ [Õ1°#Õ6Ô7Ø�‰�T×&Ñ&Ô'Ø�‰�T×'Ñ'Ô(Ø�‰�^Ô$Ø�x‰x˜‹Ðr,   c                ó  € . pVP                  VP                  R ,          R,          4       VP                  V P                  4       VP                  V P                  4       VP                  R4       RP	                  V4      # r  )rr   ré   r§   r¨   rs   r  s   && r*   Úcredential_scopeÚSigV4Auth.credential_scope†  s_   € ØˆØ�‰�W—_‘_ [Õ1°#Õ6Ô7Ø�‰�T×&Ñ&Ô'Ø�‰�T×'Ñ'Ô(Ø�‰�^Ô$Ø�x‰x˜‹Ðr,   c                ó  € R.pVP                  VP                  R,          4       VP                  V P                  V4      4       VP                  \        VP	                  R4      4      P                  4       4       RP                  V4      # )zŒ
Return the canonical StringToSign as well as a dict
containing the original version of all headers that
were included in the StringToSign.
úAWS4-HMAC-SHA256r  r/   r^   )rr   ré   r  r   rp   r®   rs   )r?   r7   r  Ústss   &&& r*   r{   ÚSigV4Auth.string_to_signŽ  sl   € ð "Ð"ˆØ�
‰
�7—?‘? ;Õ/Ô0Ø�
‰
�4×(Ñ(¨Ó1Ô2Ø�
‰
”6Ð+×2Ñ2°7Ó;Ó<×FÑFÓHÔIØ�y‰y˜‹~Ðr,   c                óZ  € V P                   P                  pV P                  R V 2P                  4       VP                  R,          R,          4      pV P                  W@P
                  4      pV P                  WPP                  4      pV P                  VR4      pV P                  WqRR7      # )ÚAWS4r  r  r  T)r°   )rX   ro   r²   rp   ré   r§   r¨   )r?   r{   r7   r~   Úk_dateÚk_regionÚ	k_serviceÚ	k_signings   &&&     r*   r”   ÚSigV4Auth.signatureš  s�   € Ø×Ñ×)Ñ)ˆØ—‘Ø�C�5ˆ\×!Ñ!Ó# W§_¡_°[Õ%AÀ#Õ%Fó
ˆð —:‘:˜f×&7Ñ&7Ó8ˆØ—J‘J˜x×);Ñ);Ó<ˆ	Ø—J‘J˜y¨.Ó9ˆ	Ø�z‰z˜)¸ˆzÓ>Ð>r,   c                óæ  € V P                   f   \        4       h\        4       pVP                  \        4      VP
                  R&   V P                  V4       V P                  V4      p\        P                  R4       \        P                  RV4       V P                  W4      p\        P                  RV4       V P                  WA4      p\        P                  RV4       V P                  W4       R # )Nr  z$Calculating signature using v4 auth.zCanonicalRequest:
%súStringToSign:
%szSignature:
%s)rX   r   r   r�   ÚSIGV4_TIMESTAMPré   Ú_modify_request_before_signingr  rg   rh   r{   r”   Ú_inject_signature_to_request)r?   r7   Údatetime_nowr  r{   r”   s   &&    r*   r<   ÚSigV4Auth.add_auth¤  sÀ   € Ø×ÑÒ#Ü$Ó&Ð&Ü+Ó-ˆØ'3×'<Ñ'<¼_Ó'Mˆ�‰˜Ñ$ð 	×+Ñ+¨GÔ4Ø ×2Ñ2°7Ó;ÐÜ�‰Ð;Ô<Ü�‰Ð,Ð.?Ô@Ø×,Ñ,¨WÓHˆÜ�‰Ð(¨.Ô9Ø—N‘N >Ó;ˆ	Ü�‰Ð% yÔ1à×)Ñ)¨'Ö=r,   c                óü   € R V P                  V4       2.pV P                  V4      pVP                  RV P                  V4       24       VP                  RV 24       RP	                  V4      VP
                  R&   V# )zAWS4-HMAC-SHA256 Credential=zSignedHeaders=z
Signature=ú, ÚAuthorization)r  r»   rr   râ   rs   r    )r?   r7   r”   Úauth_strr»   s   &&&  r*   r.  Ú&SigV4Auth._inject_signature_to_request¶  s~   € Ø2°4·:±:¸gÓ3FÐ2GÐHÐIˆØ×.Ñ.¨wÓ7ˆØ�‰Ø˜T×0Ñ0°ÓAÐBÐCô	
ð 	�‰˜* Y KÐ0Ô1Ø+/¯9©9°XÓ+>ˆ�‰˜Ñ(Øˆr,   c                óÈ  € R VP                   9   d   VP                   R  V P                  V4       V P                  P                  '       dB   RVP                   9   d   VP                   R V P                  P                  VP                   R&   VP                  P                  RR4      '       g4   RVP                   9   d   VP                   R \        VP                   R&   R# R# )r3  rŸ   r  Tr	  N)r    Ú_set_necessary_date_headersrX   r“   ré   r$   ró   r>   s   &&r*   r-  Ú(SigV4Auth._modify_request_before_signingÀ  s´   € Ø˜gŸo™oÔ-Ø—‘ Ð0Ø×(Ñ(¨Ô1Ø×Ñ×!×!Ð!Ø%¨¯©Ô8Ø—O‘OÐ$:Ð;Ø6:×6FÑ6F×6LÑ6LˆG�O‰OÐ2Ñ3à�‰×"Ñ"Ð#<¸d×CÒCØ%¨¯©Ô8Ø—O‘OÐ$:Ð;Ü6FˆG�O‰OÐ2Ó3ñ Dr,   c                óò  € R VP                   9   d¨   VP                   R  \        P                  P                  VP                  R,          \        4      p\        \        \        P                  ! VP                  4       4      4      4      VP                   R &   RVP                   9   d   VP                   R R# R# RVP                   9   d   VP                   R VP                  R,          VP                   R&   R# )rœ   r  ú
X-Amz-DateN)
r    ÚdatetimeÚstrptimeré   r,  r   ÚintÚcalendarÚtimegmÚ	timetuple)r?   r7   Údatetime_timestamps   && r*   r7  Ú%SigV4Auth._set_necessary_date_headersÎ  sÁ   € ð �W—_‘_Ô$Ø—‘ Ð'Ü!)×!2Ñ!2×!;Ñ!;Ø—‘ Õ,¬oó"Ðô '1Ü”H—O’OÐ$6×$@Ñ$@Ó$BÓCÓDó'ˆG�O‰O˜FÑ#ð ˜wŸ™Ô.Ø—O‘O LÒ1ñ /ð ˜wŸ™Ô.Ø—O‘O LÐ1Ø,3¯O©O¸KÕ,HˆG�O‰O˜LÓ)r,   )r§   r¨   rX   N)F)rB   rC   rD   rE   r–   rF   rR   r²   r»   rÀ   r¾   r¿   rØ   rÐ   râ   rí   r  rò   r  r  r  r  r{   r”   r<   r.  r-  r7  rH   rI   rJ   s   @r*   r¥   r¥   Õ   sŠ   ø‡ € ñð €Oò*ôòò Kò&ò"&ò "ò 'ò!òPò
%ò4Dòòòòò
ò?ò>ò$òG÷Ið Ir,   r¥   c                   óD   a a€ ] tR tRt oV 3R ltV 3R ltR tRtVtV ;t	# )ÚS3SigV4Authiâ  c                óž   <€ \         SV `  V4       R VP                  9   d   VP                  R  V P                  V4      VP                  R &   R# )r	  N)Úsuperr-  r    r  ©r?   r7   Ú	__class__s   &&€r*   r-  Ú*S3SigV4Auth._modify_request_before_signingã  sA   ø€ Ü‰Ñ.¨wÔ7Ø! W§_¡_Ô4Ø—‘Ð 6Ð7à26·,±,¸wÓ2Gˆ�‰Ð.Ó/r,   c                ó$  <€ VP                   P                  R 4      p\        VRR4      pVf   / pVP                  RR4      pVe   V# RpVP                   P                  R/ 4      pVP                  R4      p\        V\        4      '       d    VP                  R4      R8X  d
   VR	,          pVP
                  P                  R
4      '       d   WQP                  9  d   R# VP                   P                  RR4      '       d   R# \        SV `%  V4      # )Úclient_configÚs3Nr  zContent-MD5rå   ræ   rç   Úheaderr¹   r    TÚhas_streaming_inputF)
ré   r$   Úgetattrr1   rê   r&   r  r    rF  rò   )	r?   r7   rK  Ú	s3_configÚsign_payloadÚchecksum_headerrë   rì   rH  s	   &&      €r*   rò   Ú'S3SigV4Auth._should_sha256_sign_payloadê  sú   ø€ ð  Ÿ™×+Ñ+¨OÓ<ˆÜ˜M¨4°Ó6ˆ	ð ÒØˆIð !—}‘}Ð%>ÀÓEˆØÒ#ØÐð (ˆØ"Ÿ?™?×.Ñ.¨z¸2Ó>ÐØ$×(Ñ(Ð)<Ó=ˆ	Ü�i¤×&Ò&¨9¯=©=¸Ó+>À(Ô+JØ'¨Õ/ˆOà—‘×&Ñ& w×/Ò/Ø§o¡oÔ5áð �?‰?×ÑÐ4°e×<Ò<Ùô ‰wÑ2°7Ó;Ð;r,   c                ó   € V# rO   rA   ©r?   ri   s   &&r*   r  ÚS3SigV4Auth._normalize_url_path  ó   € àˆr,   rA   )
rB   rC   rD   rE   r-  rò   r  rH   rI   Ú__classcell__©rH  rK   s   @@r*   rD  rD  â  s   ù‡ € õHõ'<÷Rò r,   rD  c                   óN   a a€ ] tR tRt oRtV 3R ltV 3R ltV 3R ltRtVt	V ;t
# )ÚS3ExpressAuthi  Tc               ó4   <€ \         SV `  WV4       W@n        R # rO   )rF  rR   Ú_identity_cache)r?   rX   rª   r«   Úidentity_cacherH  s   &&&&$€r*   rR   ÚS3ExpressAuth.__init__  s   ø€ ô 	‰Ñ˜°KÔ@Ø-Ör,   c                ó&   <€ \         SV `  V4       R # rO   )rF  r<   rG  s   &&€r*   r<   ÚS3ExpressAuth.add_auth!  s   ø€ Ü‰Ñ˜Ö!r,   c                óÎ   <€ \         SV `  V4       R VP                  9  d$   V P                  P                  VP                  R &   RVP                  9   d   VP                  R R# R# )zx-amz-s3session-tokenrŸ   N)rF  r-  r    rX   r“   rG  s   &&€r*   r-  Ú,S3ExpressAuth._modify_request_before_signing$  sU   ø€ Ü‰Ñ.¨wÔ7Ø"¨'¯/©/Ô9Ø7;×7GÑ7G×7MÑ7MˆG�O‰OÐ3Ñ4à! W§_¡_Ô4Ø—‘Ð 6Ò7ñ 5r,   )r]  )rB   rC   rD   rE   ÚREQUIRES_IDENTITY_CACHErR   r<   r-  rH   rI   rX  rY  s   @@r*   r[  r[    s   ù‡ € Ø"Ðõ.õ"÷8õ 8r,   r[  c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚS3ExpressPostAuthi-  Tc                ó6  € \        4       pVP                  \        4      VP                  R &   / pVP                  P	                  RR4      e   VP                  R,          p/ p. pVP                  P	                  RR4      e1   VP                  R,          pVP	                  RR4      e
   VR,          pWTR&   RVR&   V P                  V4      VR&   VP                  R ,          VR&   VP                  RR/4       VP                  RV P                  V4      /4       VP                  RVP                  R ,          /4       V P                  P                  eA   V P                  P                  VR	&   VP                  R	V P                  P                  /4       \        P                  ! \        P                  ! V4      P                  R
4      4      P                  R
4      VR&   V P                  VR,          V4      VR&   W1P                  R&   WAP                  R&   R# )r  ús3-presign-post-fieldsNús3-presign-post-policyÚ
conditionsr   úx-amz-algorithmúx-amz-credentialú
x-amz-dateúX-Amz-S3session-Tokenr/   Úpolicyúx-amz-signature©r   r�   r,  ré   r$   r  rr   rX   r“   ru   rv   r3   Údumpsrp   r5   r”   ©r?   r7   r/  Úfieldsro  rj  s   &&    r*   r<   ÚS3ExpressPostAuth.add_auth0  sß  € Ü+Ó-ˆØ'3×'<Ñ'<¼_Ó'Mˆ�‰˜Ñ$àˆØ�?‰?×ÑÐ7¸Ó>ÒJØ—_‘_Ð%=Õ>ˆFàˆØˆ
Ø�?‰?×ÑÐ7¸Ó>ÒJØ—_‘_Ð%=Õ>ˆFØ�z‰z˜,¨Ó-Ò9Ø# LÕ1�
à)ˆ|Ñà$6ˆÐ Ñ!Ø%)§Z¡Z°Ó%8ˆÐ!Ñ"Ø&Ÿ™¨{Õ;ˆˆ|Ñà×ÑÐ,Ð.@ÐAÔBØ×ÑÐ-¨t¯z©z¸'Ó/BÐCÔDØ×Ñ˜<¨¯©¸Õ)EÐFÔGà×Ñ×!Ñ!Ò-Ø.2×.>Ñ.>×.DÑ.DˆFÐ*Ñ+Ø×ÑØ(¨$×*:Ñ*:×*@Ñ*@ÐAôô
 "×+Ò+Ü�JŠJ�vÓ×%Ñ% gÓ.ó
ç
‰&�‹/ð 	ˆxÑð %)§N¡N°6¸(Õ3CÀWÓ$MˆÐ Ñ!à4:�‰Ð0Ñ1Ø4:�‰Ð0Ó1r,   rA   N)rB   rC   rD   rE   rd  r<   rH   rI   rJ   s   @r*   rf  rf  -  s   ø‡ € Ø"Ð÷';ð ';r,   rf  c                   óZ   a a€ ] tR tRt oRtRtR]/V 3R lltR tR tR t	R	 t
R
tVtV ;t# )ÚS3ExpressQueryAuthiZ  i,  TÚexpiresc               ó:   <€ \         SV `  VVVVR 7       WPn        R# ))r^  N©rF  rR   Ú_expires)r?   rX   rª   r«   r^  rx  rH  s   &&&&$$€r*   rR   ÚS3ExpressQueryAuth.__init__^  s*   ø€ ô 	‰ÑØØØØ)ð	 	ô 	
ð  Žr,   c           
     ó¸  € VP                   P                  R 4      pRpW#8X  d   VP                   R  V P                  V P                  V4      4      pRRRV P	                  V4      RVP
                  R,          RV P                  RV/pV P                  P                  e   V P                  P                  VR
&   \        VP                  4      p\        VP                  RR7      pVP                  4        UU	u/ uF  w  r‰W‰^ ,          bK  	  p
pp	VP                  '       d#   V
P                  VP                  4       / Vn        RpVP                   '       d"   V
P                  \#        V4      4       RVn        V
'       d   \%        V
4      R,           pV \%        V4       2pTpV^ ,          V^,          V^,          WÍ^,          3p\'        V4      Vn
        R	# u up	pi )úcontent-typeú0application/x-www-form-urlencoded; charset=utf-8úX-Amz-Algorithmr   úX-Amz-Credentialr:  r  úX-Amz-ExpiresúX-Amz-SignedHeadersNrn  T©Úkeep_blank_valuesrb   rf   ©r    r$   râ   r»   r  ré   r{  rX   r“   r   r&   r   rÇ   rµ   ry   rt   r0   r8   r   r   )r?   r7   Úcontent_typeÚblocklisted_content_typerâ   Úauth_paramsr'   Úquery_string_partsÚkrÒ   Ú
query_dictÚoperation_paramsÚnew_query_stringÚpÚnew_url_partss   &&             r*   r-  Ú1S3ExpressQueryAuth._modify_request_before_signingo  s´  € ð —‘×*Ñ*¨>Ó:ˆà>ð 	!ð Ô3Ø—‘ Ð/ð
 ×,Ñ,¨T×-AÑ-AÀ'Ó-JÓKˆð Ð1Ø §
¡
¨7Ó 3Ø˜'Ÿ/™/¨+Õ6Ø˜TŸ]™]Ø! >ð
ˆð ×Ñ×!Ñ!Ò-Ø37×3CÑ3C×3IÑ3IˆKÐ/Ñ0ô ˜WŸ[™[Ó)ˆ	ô & i§o¡oÈÔNÐØ*<×*BÑ*BÔ*DÔEÑ*D¡$ !�a˜1�’gÑ*Dˆ
ÑEà�>�>ˆ>Ø×Ñ˜gŸn™nÔ-ØˆGŒNð ÐØ�<�<ˆ<ð ×ÑÔ/°Ó8Ô9ØˆGŒLßÜ6°zÓBÀSÕHÐàÐ Ô!8¸Ó!EÐ FÐGð 	ð ˆØ˜1�˜q �t Q q¥TÐ+;¸q½TÐBˆÜ  Ó/ˆŽùóA Fó   Ã7Gc                ó>   € V;P                   R V 2,          un         R# ©z&X-Amz-Signature=N©r&   ©r?   r7   r”   s   &&&r*   r.  Ú/S3ExpressQueryAuth._inject_signature_to_request°  ó   € ð 	�ŠÐ*¨9¨+Ð6Õ6�r,   c                ó   € V# rO   rA   rU  s   &&r*   r  Ú&S3ExpressQueryAuth._normalize_url_path¶  rW  r,   c                ó   € \         # rO   ©ró   r>   s   &&r*   r  ÚS3ExpressQueryAuth.payloadº  ó
   € ô
  Ðr,   ©r{  )rB   rC   rD   rE   ÚDEFAULT_EXPIRESrd  rR   r-  r.  r  r  rH   rI   rX  rY  s   @@r*   rw  rw  Z  s9   ù‡ € Ø€OØ"Ðð ð  ÷ ò"?0òB7ò÷ ò  r,   rw  c                   óH   a a€ ] tR tRt oRt]3V 3R lltR tR tRtVt	V ;t
# )ÚSigV4QueryAuthiÂ  é  c                ó4   <€ \         SV `  WV4       W@n        R # rO   rz  )r?   rX   rª   r«   rx  rH  s   &&&&&€r*   rR   ÚSigV4QueryAuth.__init__Å  s   ø€ ô 	‰Ñ˜°KÔ@ØŽr,   c           
     ó¸  € VP                   P                  R 4      pRpW#8X  d   VP                   R  V P                  V P                  V4      4      pRRRV P	                  V4      RVP
                  R,          RV P                  RV/pV P                  P                  e   V P                  P                  VR
&   \        VP                  4      p\        VP                  RR7      pVP                  4        UU	u/ uF  w  r‰W‰^ ,          bK  	  p
pp	VP                  '       d#   V
P                  VP                  4       / Vn        RpVP                   '       d"   V
P                  \#        V4      4       RVn        V
'       d   \%        V
4      R,           pV \%        V4       2pTpV^ ,          V^,          V^,          WÍ^,          3p\'        V4      Vn
        R	# u up	pi )r~  r  r€  r   r�  r:  r  r‚  rƒ  NrŸ   Tr„  rb   rf   r†  )r?   r7   r‡  Úblacklisted_content_typerâ   r‰  r'   rŠ  r‹  rÒ   rŒ  r�  rŽ  r�  r�  s   &&             r*   r-  Ú-SigV4QueryAuth._modify_request_before_signingË  s´  € ð —‘×*Ñ*¨>Ó:ˆà>ð 	!ð Ô3Ø—‘ Ð/ð
 ×,Ñ,¨T×-AÑ-AÀ'Ó-JÓKˆð Ð1Ø §
¡
¨7Ó 3Ø˜'Ÿ/™/¨+Õ6Ø˜TŸ]™]Ø! >ð
ˆð ×Ñ×!Ñ!Ò-Ø26×2BÑ2B×2HÑ2HˆKÐ.Ñ/ô ˜WŸ[™[Ó)ˆ	ô & i§o¡oÈÔNÐØ*<×*BÑ*BÔ*DÔEÑ*D¡$ !�a˜1�’gÑ*Dˆ
ÑEà�>�>ˆ>Ø×Ñ˜gŸn™nÔ-ØˆGŒNð ÐØ�<�<ˆ<ð ×ÑÔ/°Ó8Ô9ØˆGŒLßÜ6°zÓBÀSÕHÐàÐ Ô!8¸Ó!EÐ FÐGð 	ð ˆØ˜1�˜q �t Q q¥TÐ+;¸q½TÐBˆÜ  Ó/ˆŽùóA Fr’  c                ó>   € V;P                   R V 2,          un         R# r”  r•  r–  s   &&&r*   r.  Ú+SigV4QueryAuth._inject_signature_to_request  r˜  r,   rŸ  )rB   rC   rD   rE   r   rR   r-  r.  rH   rI   rX  rY  s   @@r*   r¢  r¢  Â  s%   ù‡ € Ø€Oð ?N÷ ò?0÷B7ò 7r,   r¢  c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )ÚS3SigV4QueryAuthi  zòS3 SigV4 auth using query parameters.

This signer will sign a request using query parameters and signature
version 4, i.e a "presigned url" signer.

Based off of:

http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html

c                ó   € V# rO   rA   rU  s   &&r*   r  Ú$S3SigV4QueryAuth._normalize_url_path  rW  r,   c                ó   € \         # rO   rœ  r>   s   &&r*   r  ÚS3SigV4QueryAuth.payload#  rž  r,   rA   N)	rB   rC   rD   rE   r–   r  r  rH   rI   rJ   s   @r*   r¬  r¬    s   ø‡ € ñ	ò÷ ð  r,   r¬  c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚS3SigV4PostAuthi+  zv
Presigns a s3 post

Implementation doc here:
http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html
c                ó6  € \        4       pVP                  \        4      VP                  R &   / pVP                  P	                  RR4      e   VP                  R,          p/ p. pVP                  P	                  RR4      e1   VP                  R,          pVP	                  RR4      e
   VR,          pWTR&   RVR&   V P                  V4      VR&   VP                  R ,          VR&   VP                  RR/4       VP                  RV P                  V4      /4       VP                  RVP                  R ,          /4       V P                  P                  eA   V P                  P                  VR	&   VP                  R	V P                  P                  /4       \        P                  ! \        P                  ! V4      P                  R
4      4      P                  R
4      VR&   V P                  VR,          V4      VR&   W1P                  R&   WAP                  R&   R# )r  rh  Nri  rj  r   rk  rl  rm  úx-amz-security-tokenr/   ro  rp  rq  rs  s   &&    r*   r<   ÚS3SigV4PostAuth.add_auth3  sÝ  € Ü+Ó-ˆØ'3×'<Ñ'<¼_Ó'Mˆ�‰˜Ñ$àˆØ�?‰?×ÑÐ7¸Ó>ÒJØ—_‘_Ð%=Õ>ˆFàˆØˆ
Ø�?‰?×ÑÐ7¸Ó>ÒJØ—_‘_Ð%=Õ>ˆFØ�z‰z˜,¨Ó-Ò9Ø# LÕ1�
à)ˆ|Ñà$6ˆÐ Ñ!Ø%)§Z¡Z°Ó%8ˆÐ!Ñ"Ø&Ÿ™¨{Õ;ˆˆ|Ñà×ÑÐ,Ð.@ÐAÔBØ×ÑÐ-¨t¯z©z¸'Ó/BÐCÔDØ×Ñ˜<¨¯©¸Õ)EÐFÔGà×Ñ×!Ñ!Ò-Ø-1×-=Ñ-=×-CÑ-CˆFÐ)Ñ*Ø×ÑÐ5°t×7GÑ7G×7MÑ7MÐNÔOô "×+Ò+Ü�JŠJ�vÓ×%Ñ% gÓ.ó
ç
‰&�‹/ð 	ˆxÑð %)§N¡N°6¸(Õ3CÀWÓ$MˆÐ Ñ!à4:�‰Ð0Ñ1Ø4:�‰Ð0Ó1r,   rA   N©rB   rC   rD   rE   r–   r<   rH   rI   rJ   s   @r*   r²  r²  +  s   ø‡ € ñ÷%;ð %;r,   r²  c                   ó  a € ] tR tRt o . RNRNRNRNRNRNRNR	NR
NRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNR
NRNR NR!NR"NR#NR$NtR2R& ltR' tR( tR) tR* t	R3R+ lt
R2R, ltR2R- ltR. tR/ tR0 tR1tV tR%# )4Ú
HmacV1Authi[  Ú
accelerateÚaclÚcorsÚdefaultObjectAclÚlocationÚloggingÚ
partNumberro  ÚrequestPaymentÚtorrentÚ
versioningÚ	versionIdÚversionsÚwebsiteÚuploadsÚuploadIdzresponse-content-typezresponse-content-languagezresponse-expireszresponse-cache-controlzresponse-content-dispositionzresponse-content-encodingÚdeleteÚ	lifecycleÚtaggingÚrestoreÚstorageClassÚnotificationÚreplicationÚ	analyticsÚmetricsÚ	inventoryÚselectzselect-typezobject-lockNc                ó   € Wn         R # rO   rW   r©   s   &&&&r*   rR   ÚHmacV1Auth.__init__„  r[   r,   c                ó,  € \         P                  ! V P                  P                  P	                  R 4      \
        R7      pVP                  VP	                  R 4      4       \        VP                  4       4      P                  4       P                  R 4      # )r/   r_   )rm   rn   rX   ro   rp   r   rt   r   rw   rx   r5   )r?   r{   r¡   s   && r*   Úsign_stringÚHmacV1Auth.sign_string‡  sk   € Ü—8’8Ø×Ñ×'Ñ'×.Ñ.¨wÓ7Ä4ô
ˆð 	�‰˜×-Ñ-¨gÓ6Ô7Ü˜8Ÿ?™?Ó,Ó-×3Ñ3Ó5×<Ñ<¸WÓEÐEr,   c                ó^  € . ROp. pRV9   d   VR V P                  4       VR&   V Ft  pRpV FN  pVP                  4       pW,          f   K  Wt8X  g   K'  VP                  W,          P                  4       4       RpKP  	  V'       d   Kc  VP                  R4       Kv  	  RP	                  V4      # )úcontent-md5rœ   FTrb   r^   )rÙ  r~  Údate)Ú	_get_dater¶   rr   rx   rs   )r?   r    Úinteresting_headersÚhoiÚihÚfoundr~   Úlks   &&      r*   Úcanonical_standard_headersÚ%HmacV1Auth.canonical_standard_headersŽ  sš   € ÚEÐØˆØ�WÔØ˜�ØŸ.™.Ó*ˆ�‰Û%ˆBØˆEÛ�Ø—Y‘Y“[�Ø•<Ô+°¶Ø—J‘J˜w�|×1Ñ1Ó3Ô4Ø ’Eñ	 ÷
 ‘5Ø—
‘
˜2–ñ &ð �y‰y˜‹~Ðr,   c                óv  € . p/ pV Fa  pVP                  4       pW,          f   K  VP                  R4      '       g   K8  RP                  R VP                  V4       4       4      W5&   Kc  	  \	        VP                  4       4      pV F  pVP                  V RW4,           24       K!  	  RP                  V4      # )Núx-amz-rÎ   c              3   ó@   "  € T F  qP                  4       x € K  	  R # 5irO   )rx   )rÑ   rÒ   s   & r*   rÓ   Ú6HmacV1Auth.canonical_custom_headers.<locals>.<genexpr>¦  s   é € ð 2Ù+? aŸ™Ÿ	˜	Ó+?ùs   ‚r!   r^   )r¶   r  rs   rÖ   rq   Úkeysrr   )r?   r    rÝ  Úcustom_headersr~   rà  Úsorted_header_keyss   &&     r*   Úcanonical_custom_headersÚ#HmacV1Auth.canonical_custom_headersŸ  s¨   € ØˆØˆÛˆCØ—‘“ˆBØ�|Ô'Ø—=‘= ×*Ô*Ø),¯©ñ 2Ø+2¯?©?¸3Ô+?ó2ó *�NÓ&ñ	 ô $ N×$7Ñ$7Ó$9Ó:ÐÛ%ˆCØ�J‰J˜#˜˜a Õ 3Ð4Ð5Ö6ñ &à�y‰y˜‹~Ðr,   c                ó\   € \        V4      ^8X  d   V# V^ ,          \        V^,          4      3# )z
TODO: Do we need this?
)rj   r   )r?   Únvs   &&r*   Ú	unquote_vÚHmacV1Auth.unquote_v®  s+   € ô ˆr‹7�aŒ<ØˆIà�q•Eœ7 2 a¥5›>Ð*Ð*r,   c                ó.  € Ve   TpMVP                   pVP                  '       dá   VP                  P                  R4      pV Uu. uF  qUP                  R^4      NK  	  ppV Uu. uF-  qU^ ,          V P                  9   g   K  V P	                  V4      NK/  	  pp\        V4      ^ 8”  d]   VP                  \        ^ 4      R7       V Uu. uF  pRP                  V4      NK  	  ppVR,          pVRP                  V4      ,          pV# u upi u upi u upi )Nrf   re   )r~   Ú?)	ri   rÇ   rz   ÚQSAOfInterestrî  rj   Úsortr   rs   )r?   rz   Ú	auth_pathÚbufÚqsaÚas   &&&   r*   Úcanonical_resourceÚHmacV1Auth.canonical_resource·  sò   € ð Ò Ø‰Cà—*‘*ˆCØ�;�;ˆ;Ø—+‘+×#Ñ# CÓ(ˆCÙ,/Ó0©C q—7‘7˜3 –?©CˆCÐ0á+.óÙ+. a°Aµ$¸$×:LÑ:LÑ2LÔ!�—‘˜qÖ!©3ð ð ô �3‹x˜!Œ|Ø—‘œZ¨›]�Ô+Ù,/Ó0©C q�s—x‘x –{©C�Ð0Ø�s•
�Ø�s—x‘x “}Õ$�Øˆ
ùò 1ùòùò
 1s   ÁDÁ%DÂDÃ	Dc                óð   € VP                  4       R ,           pW`P                  V4      R ,           ,          pV P                  V4      pV'       d   WgR ,           ,          pW`P                  W%R7      ,          pV# )r^   ©rô  )r
  rá  rê  rø  )r?   rk   rz   r    rx  rô  Úcsrè  s   &&&&&&  r*   Úcanonical_stringÚHmacV1Auth.canonical_stringÑ  sg   € ð �\‰\‹^˜dÕ"ˆØ
×-Ñ-¨gÓ6¸Õ=Õ=ˆØ×6Ñ6°wÓ?ˆßØ 4Õ'Õ'ˆBØ
×%Ñ% eÐ%ÓAÕAˆØˆ	r,   c                óæ   € V P                   P                  '       d   VR  V P                   P                  VR &   V P                  WW5R7      p\        P	                  RV4       V P                  V4      # )r´  rû  r+  )rX   r“   rý  rg   rh   rÖ  )r?   rk   rz   r    rx  rô  r{   s   &&&&&& r*   Úget_signatureÚHmacV1Auth.get_signatureÜ  sr   € ð ×Ñ×!×!Ð!ØÐ.Ð/Ø.2×.>Ñ.>×.DÑ.DˆGÐ*Ñ+Ø×.Ñ.Ø˜7ð /ó 
ˆô 	�‰Ð(¨.Ô9Ø×Ñ Ó/Ð/r,   c                óH  € V P                   f   \        h\        P                  R4       \	        VP
                  4      p\        P                  RVP                  4       V P                  VP                  W!P                  VP                  R7      pV P                  W4       R # )Nz(Calculating signature using hmacv1 auth.zHTTP request method: %srû  )rX   r   rg   rh   r   r&   rk   r   r    rô  Ú_inject_signature)r?   r7   rz   r”   s   &&  r*   r<   ÚHmacV1Auth.add_authè  s|   € Ø×ÑÒ#Ü$Ð$Ü�‰Ð?Ô@Ü˜Ÿ™Ó%ˆÜ�‰Ð.°·±Ô?Ø×&Ñ&Ø�N‰N˜E§?¡?¸g×>OÑ>Oð 'ó 
ˆ	ð 	×Ñ˜wÖ2r,   c                ó   € \        R R7      # )Tr�   r   ©r?   s   &r*   rÛ  ÚHmacV1Auth._get_dateó  s   € Ü Ô&Ð&r,   c                ó–   € R VP                   9   d   VP                   R  RV P                  P                   RV 2pW1P                   R &   R# )r3  zAWS r!   N)r    rX   rŽ   )r?   r7   r”   Úauth_headers   &&& r*   r  ÚHmacV1Auth._inject_signatureö  sG   € Ø˜gŸo™oÔ-ð —‘ Ð0à˜T×-Ñ-×8Ñ8Ð9¸¸9¸+ÐFˆØ+6�‰˜Ó(r,   rW   )NNrO   )rB   rC   rD   rE   rò  rR   rÖ  rá  rê  rî  rø  rý  r   r<   rÛ  r  rH   rI   rJ   s   @r*   r¸  r¸  [  s¸  ø‡ € ð%Øð%àð%ð 	ð%ð 	ð	%ð
 	ð%ð 	ð%ð 	ð%ð 	ð%ð 	ð%ð 	ð%ð 	ð%ð 	ð%ð 	ð%ð 	ð%ð 	ð%ð  	ð!%ð" 	 ð#%ð$ 	$ð%%ð& 	ð'%ð( 	!ð)%ð* 	'ð+%ð, 	$ð-%ð. 	ð/%ð0 	ð1%ð2 	ð3%ð4 	ð5%ð6 	ð7%ð8 	ð9%ð: 	ð;%ð< 	ð=%ð> 	ð?%ð@ 	ðA%ðB 	ðC%ðD 	ðE%ðF 	ðG%ðH 	ðI%€MôN'òFòò"ò+ôô4	ô
0ò	3ò'÷7ð 7r,   r¸  c                   ó@   a € ] tR tRt o RtRt]3R ltR tR tRt	V t
R# )	ÚHmacV1QueryAuthi  z­
Generates a presigned request for s3.

Spec from this document:

http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
#RESTAuthenticationQueryStringAuth

r£  c                ó   € Wn         W n        R # rO   )rX   r{  )r?   rX   rx  s   &&&r*   rR   ÚHmacV1QueryAuth.__init__  s   € Ø&ÔØŽr,   c                ó„   € \        \        \        P                  ! 4       \        V P                  4      ,           4      4      # rO   )r6   r=  r�   r{  r  s   &r*   rÛ  ÚHmacV1QueryAuth._get_date  s&   € Ü”3”t—y’y“{¤S¨¯©Ó%7Õ7Ó8Ó9Ð9r,   c                ó  € / pV P                   P                  VR &   W#R&   VP                   Fg  pVP                  4       pVR8X  d   VP                  R,          VR&   K2  VP	                  R4      '       g
   VR9   g   KR  VP                  V,          W5&   Ki  	  \        V4      p\        VP                  4      pV^,          '       d   V^,           RV 2pV^ ,          V^,          V^,          Wg^,          3p\        V4      Vn        R# )r‡   ra   rœ   ÚExpiresrä  rf   N)rÙ  r~  )	rX   rŽ   r    r¶   r  r   r   r&   r   )	r?   r7   r”   rŒ  Ú
header_keyrà  rŽ  r�  r�  s	   &&&      r*   r  Ú!HmacV1QueryAuth._inject_signature  sø   € Øˆ
Ø'+×'7Ñ'7×'BÑ'Bˆ
Ð#Ñ$Ø"+�;Ñà!Ÿ/œ/ˆJØ×!Ñ!Ó#ˆBð ˜VÔ#Ø(/¯©¸Õ(?�
˜9Ó%ð —‘˜x×(Ò(¨Bð 3ö -ð ")§¡°Õ!4�
“ñ *ô  3°:Ó>Ðô �W—[‘[Ó!ˆØˆQ�4Œ4ð #$ A¥$  qÐ)9Ð(:Ð;ÐØ˜1�˜q �t Q q¥TÐ+;¸q½TÐBˆÜ  Ó/ˆŽr,   )r{  rX   N)rB   rC   rD   rE   r–   r   rR   rÛ  r  rH   rI   rJ   s   @r*   r  r    s(   ø‡ € ñð €Oà,;ô  ò:÷0ð 0r,   r  c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚHmacV1PostAuthi9  z�
Generates a presigned post for s3.

Spec from this document:

http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html
c                óþ  € / pVP                   P                  R R4      e   VP                   R ,          p/ p. pVP                   P                  RR4      e1   VP                   R,          pVP                  RR4      e
   VR,          pWCR&   V P                  P                  VR&   V P                  P                  eA   V P                  P                  VR&   VP                  RV P                  P                  /4       \        P                  ! \        P                  ! V4      P                  R4      4      P                  R4      VR&   V P                  VR,          4      VR&   W!P                   R &   W1P                   R&   R# )	rh  Nri  rj  r‡   r´  r/   ro  r”   )ré   r$   rX   rŽ   r“   rr   ru   rv   r3   rr  rp   r5   rÖ  )r?   r7   rt  ro  rj  s   &&   r*   r<   ÚHmacV1PostAuth.add_authB  sR  € ØˆØ�?‰?×ÑÐ7¸Ó>ÒJØ—_‘_Ð%=Õ>ˆFàˆØˆ
Ø�?‰?×ÑÐ7¸Ó>ÒJØ—_‘_Ð%=Õ>ˆFØ�z‰z˜,¨Ó-Ò9Ø# LÕ1�
à)ˆ|Ñà#'×#3Ñ#3×#>Ñ#>ˆÐÑ à×Ñ×!Ñ!Ò-Ø-1×-=Ñ-=×-CÑ-CˆFÐ)Ñ*Ø×ÑÐ5°t×7GÑ7G×7MÑ7MÐNÔOô "×+Ò+Ü�JŠJ�vÓ×%Ñ% gÓ.ó
ç
‰&�‹/ð 	ˆxÑð #×.Ñ.¨v°hÕ/?Ó@ˆˆ{Ñà4:�‰Ð0Ñ1Ø4:�‰Ð0Ó1r,   rA   Nr¶  rJ   s   @r*   r  r  9  s   ø‡ € ñ÷;ð ;r,   r  c                   ó*   a € ] tR tRt o RtR tRtV tR# )Ú
BearerAuthia  zÁ
Performs bearer token authorization by placing the bearer token in the
Authorization header as specified by Section 2.1 of RFC 6750.

https://datatracker.ietf.org/doc/html/rfc6750#section-2.1
c                óÀ   € V P                   f   \        4       hRV P                   P                   2pRVP                  9   d   VP                  R W!P                  R&   R # )NzBearer r3  )rQ   r   r“   r    )r?   r7   r	  s   && r*   r<   ÚBearerAuth.add_authi  sP   € Ø�?‰?Ò"Ü"Ó$Ð$à §¡× 5Ñ 5Ð6Ð7ˆØ˜gŸo™oÔ-Ø—‘ Ð0Ø+6�‰˜Ó(r,   rA   Nr¶  rJ   s   @r*   r  r  a  s   ø‡ € ñ÷7ð 7r,   r  c                 ó¾   € V  FL  pVR 8X  d   \         V,          u # V\         9   d   \         V,          pV\        9   d   Vu # KB  \        VR7      h	  \        V R7      h)úsmithy.api#noAuth©Úsignature_version)ÚAUTH_TYPE_TO_SIGNATURE_VERSIONÚAUTH_TYPE_MAPSr   r   )Ú
auth_traitÚ	auth_typer   s   &  r*   Úresolve_auth_typer%  s  sa   € Ûˆ	ØÐ+Ô+Ü1°)Õ<Ò<ØÔ8Ô8Ü >¸yÕ IÐØ ¤NÔ2Ø(Ò(ñ 3ô /ÀÔKÐKñ  ô +¸ZÔ
HÐHr,   c                 ó  € V Uu. uF  q"P                  R 4      R,          NK  	  ppV  Uu. uF  pV\        9  g   K  VNK  	  ppV'       d   \        P                  RV4       W,           p\        P                  V4       Uu. uF  pW#9   g   K  VNK  	  ppV F=  pVR8X  d   \        V,          u # \        P                  V4      pV\        9   g   K;  Vu # 	  \        RP                  \        V4      4      R7      hu upi u upi u upi )Ú#z/Unsupported auth schemes in preference list: %rÚnoAuthr2  r  éÿÿÿÿ)rz   ÚAUTH_PREF_TO_SIGNATURE_VERSIONrg   rh   rê   Úfromkeysr$   r"  r   rs   rq   )Úpreference_listÚauth_optionsr%   Úservice_supportedÚunsupportedÚcombinedÚprioritized_schemesÚsig_versions   &&      r*   Úresolve_auth_scheme_preferencer3  €  s  € Ù=IÓJ¹\°6Ÿ™ cÓ*¨2×.Ð.¹\ÐÐJñ &óá%ˆFØÔ7Ñ7÷ 	ˆÙ%ð ð ÷
 Ü�‰Ø=¸{ô	
ð Õ2€Hô —m‘m HÔ-óá-ˆFØÑ&÷ 	ˆÙ-ð ð ó &ˆØ�XÔÜ1°&Õ9Ò9Ü4×8Ñ8¸Ó@ˆØœ.Ö(ØÒñ &ô +ØŸ)™)¤FÐ+<Ó$=Ó>ôð ùò5 Kùòùòs   … C>«D½DÂDÂDÚv2Úv3Úv3httpsrL  zs3-queryzs3-presign-postzs3v4-presign-postzv4-s3expresszv4-s3express-queryzv4-s3express-presign-postÚbearer)ÚCRT_AUTH_TYPE_MAPSÚv4zv4-queryÚs3v4z
s3v4-queryzaws.auth#sigv4zaws.auth#sigv4aÚv4azsmithy.api#httpBearerAuthr  Únoner'  i   )Úexpectztransfer-encodingz
user-agentzx-amzn-trace-idr)  )Lru   r>  r;  r÷   rm   r3   r¾  r�   Úcollections.abcr   Úemail.utilsr   Úhashlibr   r   Úoperatorr   Úbotocore.compatr	   r
   r   r   r   r   r   r   r   r   r   Úbotocore.exceptionsr   r   r   r   Úbotocore.utilsr   r   r   Ú	getLoggerrB   rg   rü   rú   r‘   r,  r·   ró   rñ   r+   r8   r:   rM   rU   r˜   r¥   rD  r[  rf  rw  r¢  r¬  r²  r¸  r  r  r  r%  r3  r"  Úbotocore.crt.authr8  rt   r!  rµ   rz   r*  )Úauth_schemer2  s   00r*   Ú<module>rH     se  ðó Û Û Û Û Û Û Û Ý #Ý "ß  Ý ÷÷ ÷ ñ ÷ó ÷ñ ð 
×	Ò	˜8Ó	$€ð Gð ð €Ø
€Ø"€òÐ ð &Ð Ø%IÐ "òò&
÷.ñ .ô%�*ô %ô:�
ô :ôz<�
ô <ô8JI�
ô JIôZ3�)ô 3ôl8�Kô 8ô**;˜ô *;ôZe ˜ô e ôPN7�Yô N7ôb �~ô  ô0-;�iô -;ô`f7�ô f7ôR20�jô 20ôj%;�Zô %;ôP7�ô 7ò$
IòðB 	ˆ)Øˆ)ØˆyØˆ*Ø�Ø�~Ø˜Ø�MØÐ,ØÐ!2Øˆjð€÷ Ý4à×ÑÐ,Õ-à×Ñà�)Ø˜Ø�KØÐ*ð		
ôð �dØ�uØ Ø˜ð	"Ð ð %C×$HÑ$HÔ$Jô"á$JÑ ˆð ×Ñ�cÓ˜2Õ Ò+Ù$Jò"Ò ùó "s   Æ6$G 