Files
boc/aamos-ledger-rust/target/debug/deps/libtower_http-54c07c1caee2ac8f.rmeta
T

1790 lines
382 KiB
Plaintext
Raw Normal View History

rust
Œö#rustc 1.96.0 (ac68faa20 2026-05-25)ÁÀ뉊]!ÜÛê(¹Þ—šên-5be7b69c3ff7b5b8ÁíàÄTËŸ ÜJîÄ)'ß\¥!-3d1337db07d0b3aeÁ¤²XctÔ'ÐÓ©z¨ɽÓ-a4945860e1c53b00Á¤°ð ¾ä-±($²ï=©Ã-7e98a21bfd32b0edÁòÖÀH•‘PIÓHã#£-055f30b747f859b6Árustc_std_workspace_coreÁ­Cçß^ò½èÝ$­Çÿ+Cé-c4878ee60b2242c9ÁŸÃï+Ñ]ŠqB<ÏïW#-8dd1dd90e70d0b6aÁ miniz_oxideÁ€š»J(P>àö÷g\K-1eb618da2918ab7fÁadler2ÁÆ;+Þ®5¥Ìýݰ¦ÛLˆ-f7919172d268e069Á hashbrownÁPäV9ÒÆèÜ"ÊÖVŽ\-0fc2184a5da6723aÁrustc_std_workspace_allocÁs&ØòØy¯s•bæ!‰ýŠ-97e4bf30be240674Á
std_detectÁhŠBîÙºÌI®ËÅš-9dbbf8346ba7ac8bÁrustc_demangleÁûë9´Ç×@Œ’ùXFº-f33013f239bf9f14Ácfg_ifÁÜLhž§Œaã¯>­-0a71c8f33a838301Á addr2lineÁ׎Þ!]8V$É@@-e618e6be60e87ba2ÁgimliÁ¸
°µ~Î1‹Ñt ðÁ€w-1f7768a68858f670ÁobjectÁ
áPÃ?­À¶¼QHJ¥-914cd6a4dbe590d1ÁmemchrÁ›º«8Ór­2Ù $¨ûib-cf21ca6f2bb15dcdÁë
‹ás«LÖ€îâƒ×ɯŒ-ee6f3747e38367f0ÁhttpÁz"fL†ØÞÄ_°¢_ qÛ-e48ab040bc3ddb47ÁbytesÁ`²['3_²µÆ=üå¥-d4f44708ed5da7b6ÁitoaÁrLpèòÐ
ݽ‚AéGT'-7ba5a7b63f68a66bÁ futures_utilÁNdpµÙærC˜ÊÉíNá-c6fee091c887f5ffÁ futures_coreÁÆöc$޳–º¾v¸dK-ac1e9cdb826f83c0Á futures_taskÁÀð‘ôRî-Ø¡±ê¹-b68ad6d97da04350Á futures_sinkÁL1T𽉤
¾
Èþ.-14e3b8a05e30b9eeÁpin_project_liteÁ·x¼+Ä`·á¨›t—¸Íœ-2dc344ecc91b59efÁslabÁ³=E–¿Ü;Ö¾t,)ã(-82737aed38d266b2Á
futures_ioÁTo«Š§ J­íZu\Ȩ-94612345b0215f77Áì­†°<šÒ"®9eæ·3š¶Ø-809318e8f6183885Á http_bodyÁÙè!" )I
lŽà‚ÝFŬ-5ba25dbd9e9a894eÁtowerÁ§Ì[:]^!öýÕÍJ¤ ²-b162028a41a7f1f9ÁtokioÁ,¿¢¨˜É0!ñ?-…”¼9-3beca82a6f76b5d4ÁmioÁGùj0ðÔ·â"FÆ#0Q-3545320490828222Áæ\‹±ÔcdùÀTƒ-f86f80b348d33b13Ásocket2ÁsT›¸n>~RÊ1G/R-c161f09f0083d1e0Á
tower_serviceÁ:`¡{¶aÛ¬í"aô-3b2010b03e380b78Á tower_layerÁX*ø6êWHNᕈf§-ee72e88a461fccddÁ sync_wrapperÁTÃ@Oø~:åÍžêƒE¦«-fb4745e3f4df95dbÁurlÁ|2¿Ë|«ÔËÞ
Î'7‰&h-eb4862146510db1cÁform_urlencodedÁg
¥N`ù®”b§³‚ŽŠ-8b8228a5928ce2f9Ápercent_encodingÁ¼Ë¥"Iý¹é·Aµ†gãä-bde46fa019ba58c1ÁidnaÁ×—Ö½;Çí6öpU…·-5708750a07396acaÁ idna_adapterÁ¨Võý|ìÖà%\!2øB-f67616d3ed188abdÁicu_normalizerÁ‡/CE@îÁŽ<{9ÐháX-4bb868b749a66746Á icu_providerÁ±Õ¿¨ÞNXþNmÖ(/ÂèS-db5b46d656d85189ÁzerotrieÁá}"SŽUMö@0=$_²-05178122ec16f752Á
displaydocÁ©$-.ÿæ§ï=[œiF-53df79815c011341ÁzerofromÁ/ŽErÅÉŽV 7Í-92c585200eab8211Ázerofrom_deriveÁŸæþÇŽá2?M¥e (-abe85a41d9dcc735ÁyokeÁ?9›Š´;1ˆOøÀ-f8bf9e5b8bbb2034Ástable_deref_traitÁ½ÊTýö÷n˜TóQ-á†-771635b0451f799dÁ yoke_deriveÁ×ã„Ô„ýT·+CIƒ•sÙ-ad663b8de2c8c776ÁzerovecÁ 
åLì{'h‚ïhïD¯Ð-719747d224e025f1Ázerovec_deriveÁ£½+d“ð΃-m*¸]-09ac241eaa4a8700Á writeableÁ²é´‘¥1§%‚ý uÈ%-735c33932dd69842Áicu_locale_coreÁ*WéŽu>9gà ¦$hs-18874daa5c5c87adÁlitemapÁÎ xj+Þ*`²ÔtJ²-5054981e83d0528aÁtinystrÁ ²ãЕ 'xË´BXßñÖ-607f5ace9a59a465Áicu_collectionsÁŸÚõñ«œnD&èK˜vf—-7ebf91bcf11bab00Á
potential_utfÁ‘j&fX`ËW¯czw㈛-f50640784dd0cec0Á utf8_iterÁ‚×úÐ'œÌx G¤Ä^-6f20145e2e3e1c24Áicu_normalizer_dataÁÈÙãµ§ù»/ô#\“ï-4d42ceae66c85c80ÁsmallvecÁ[“S‰«2ûÓàÁ3™ËºS-fa382cf08413422fÁserdeÁFVæ¸Û•IÄÀzÍ-9c8ce3cf08540cc3Á serde_deriveÁ,w|êñ]ù¿¥­C£ð-975c43f96d83014eÁ
serde_coreÁ²€Ãb˜cÐòžÇÇ
-7a42419d8e43b208Áicu_propertiesÁѬU°É(W9PKÅQ{5øú-18d7694dd09bc684Áicu_properties_dataÁTˆ{Z3Ñnþ&H¶=_?3-8894fd72e4000317ÁbitflagsÁÊCd©Áòt!ž
è±éŠ-795688bf52842371Á test_helpersÁd±6$¦6authÁ$á6»„Æ6
set_headerÁT7»
set-headerÁ´î6propagate_headerÁ„É7»propagate-headerÁä¢7 compressionÁ\ü8»compression-brÁÔë7»compression-deflateÁü‹8»compression-gzipÁä°8»compression-zstdÁäÒ8üå7Œ
add_extensionÁl´9»
add-extensionÁÌ9sensitive_headersÁŒò9»sensitive-headersÁìÊ9
decompressionÁl®;»decompression-brÁä•:»decompression-deflateÁü·:!»decompression-gzipÁôÞ:»decompression-zstdÁô‚;ü:”content_encodingÁ„µ> »ÔÍ;»­üí;»Íä’<»éä´<»ŒäÖ<»¨üø<!»ÊôŸ=»èôÃ=»fsÁtç=üÇ;çcompression_utilsÁŒõ@»Ô×>»­ü÷>»Íäœ?»éä¾?»Œäà?»¨ü‚@!»Êô©@»èôÍ@üÑ>CompressionLevelÁ„ÍC»Ô˜A»­ü¸A»ÍäÝA»éäÿA»Œä¡B»¨üÃB!»ÊôêB»èôŽCü’Amap_response_bodyÁŒŽD»map-response-bodyÁìæCmap_request_bodyÁ„ÏD»map-request-bodyÁä¨DtraceÁ,„E»“$ŒèD testsÁ,š$0®$,â$×K®$,«$ X®$,$~®$,ù®$,ŸA$”A®$,üb$ñblimitÁ,ìE»¸%ŒÐEmetricsÁ<˜F»Ó%œúEcorsÁ$ÃF»ð%„¨F
request_idÁTñF»
request-idÁ´ÐF catch_panicÁ\¦G» catch-panicÁ¼„G
set_statusÁTÛG»
set-statusÁ´ºGtimeoutÁ<ŒH»Š'œîGnormalize_pathÁtÁH»normalize-pathÁÔœH
on_early_dropÁlüH»
on-early-dropÁÌØHÀ®$,âY$×Y®$,™  usable_for_retriesÁ”Øe
$Íe
ëredirectÁDÿ »Ø(¤à ëRedirectÁDÎ »Ø(¤ ëŠ!ø »Š!tß ëServeDirÁD¶ »Š!tƒ ë ServeFileÁLÀ »Š! "builderÁ<ÎI»utilÁ„·I service_extÁ\ôI»ü)„ÝIServiceBuilderExtÁŒÂJ»ü)„ˆJ
ServiceExtÁTâJ»ü) "validate_requestÁ„K»validate-requestÁäöJbodyÁ$ M»Ë&¼¿K»ŒäÜK»¨üþK!»Êô¥L»èôÉL»Š!tíL»¸%ŒMü¹KÜÀmacrosÁdefine_inner_service_accessorsÁ opaque_bodyÁ
opaque_futureÁfollow_redirectÁpolicyÁµ      æ BdÁ Ð-Ø(
on_requestÁ
clone_bodyÁ 
clone_body_fnÁ$$×''''Ø('˜.­.--filter_credentialsÁ0000000000 0 BLOCKLISTÁ0<æ <block_cross_originÁ< block_anyÁ<
block_noneÁ<remove_blocklistedÁ<
remove_allÁ< remove_noneÁ0D>0FFFØ(F‡.limitedÁKKKKKPæ KR>KTTTØ(
XXXXXX^^^æ aÐ-aXdÐ-ddddØ(d‡.d˜.k  redirect_fnÁmmmmmmss×mvvvvØ(mæ2{{ same_originÁ~~~~~~~æ ~×~Ø( 
  
PolicyÁŸŸŸØ(Ÿ‡.Ÿ˜.¥¥¥¡¥Ø(¥‡.¥˜.¬¬¬¡¬Ø(¬‡.¬˜. PolicyExtÁ³µ´¡´´³
¸¡¸¸¼¥¼µ¾¡¾¾¼
¡ÂÂStandardÁAttemptÁÇ'aÁÇstatusÁÇmethodÁÇlocationÁÇprevious_methodÁÇpreviousÁÎÐ7ÎÚ7Îè7Îö7Ά8Î8Õ is_followÁÕis_stopÁØØØØ(ÜÜÜØ( eq_originÁ 
  
 !"#æ ¡ with_policyÁФСŠServiceÁŠlayerÁ¤æ «;¤¡õ:layer_with_policyÁ˜ReqBodyÁ˜ResBodyÁ˜¤˜¡˜ResponseÁ˜ErrorÁ˜FutureÁ˜
poll_readyÁ˜Ñ¢¤¢<¢œ<¢¡¢°¢Š ¨ ¨ ««takeÁ«try_clone_fromÁ®¡®˜.±¡±± resolve_uriÁclassifyÁgrpc_errors_as_failuresÁÀÀÀÀÀÀÀÀÀÀ À
À ÀÍ into_bitmaskÁÀÏ÷ÀÑ÷ÀÓ try_from_u32ÁÀÕ>À׿ × with_successÁ×make_classifierÁÀÛ FailureClassÁÛ ClassifyEosÁÛclassify_responseÁÞÛclassify_errorÁàÀâÙ@â classify_eosÁâ¡AåÀç×Àclassify_grpc_metadataÁéor_elseÁé map_failure_classÁìììììììììõõõæ ìùùù×ìýýýNewClassÁýÙ@ýí@ý€Aƒý¡Aì¿CÙ@ÌA¡Astatus_in_range_is_errorÁæ  new_for_client_and_server_errorsÁinto_make_classifierÁÙ@í@€A ¡A¢¤× 
  
MakeClassifierÁ°
ClassifierÁ°Ù@°í@°½@´æ ¹¹Ù@¹í@¹äF¹½@¾ClassifyResponseÁÀÙ@Àí@À€AÃÀ¡AÅÀ¯BÇÇ¿Cí@ÊÙ@ÊÌAÊ¡AÍʯBÏÏ¿CNeverClassifyEosÁÒ¥Ò
_output_tyÁÒ_neverÁÖ¥ÖÙ@ÖÌAÖ¡AÚÜ¥Ü×ßæ ß½@âÙ@âí@â€Aåâ¡Açé×servicesÁBoxErrorÁ AndÁííí¬í­ òòòƒ öö ùùù× ýýý> CloneBodyFnÁ±ƒ0FilterCredentialsÁÿ/˜0¹0Ò0blockedÁ0ƒ0×KLimitedÁ remainingÁKKƒKK×XOrÁ¬­X   ƒX¤¤X§§§×X«««>m
RedirectFnÁ¯¯±m²²ƒmµ~
SameOriginÁ·_privÁ~~ºƒ~~½>ActionÁ¿FollowÁÀ
¿StopÁÂ
Ń 
È×FollowRedirectLayerÁÊ¡Ê-̓͡ С
Ò¡Ò× Õ¡Õ>FollowRedirectÁؤءØinnerÁØ- ݤݡ݃
á¤á¡ä¤ä¡ä×get_refÁget_mutÁ
into_innerÁResponseFutureÁë¤ëë¡ëfutureÁëserviceÁë-ëè7ëuriÁëÄëheadersÁë¦+÷¤÷÷¡÷×üý¤ýý¡ü__assert_not_repr_packedÁ¤¡ü
ProjectionÁ'__pinÁ¤¡›S©S-è7ÈSÄÛS¦+ü
ProjectionRefÁƒU¤¡›S©S-è7ÈSÄÛS¦+ýprojectÁŸƒUý project_refÁ¡ƒUü__OriginÁ£ƒU£¤££¡£__dummy_lifetimeÁ£S£©S£-£è7£ÈS£Ä£ÛS£¦+ü±ƒU±¤±±¡üMustNotImplDropÁü·¥ü¹¤¹¹¡
RequestUriÁ½
½ˆÀƒBodyReprÁÂÂÛÄ
ĈÂEmptyÁÇ
婃
ËË×ÀGrpcCodeÁΫÏ
Î CancelledÁÑ
ÎUnknownÁÓ
ÎInvalidArgumentÁÕ
ÎDeadlineExceededÁ×
ÎNotFoundÁÙ
Î
AlreadyExistsÁÛ
ÎPermissionDeniedÁÝ
ÎResourceExhaustedÁß
ÎFailedPreconditionÁá
ÎAbortedÁã
Î
OutOfRangeÁå
Î
UnimplementedÁç
ÎInternalÁé
Î UnavailableÁë
ÎDataLossÁí
ÎUnauthenticatedÁï
À À
òƒÀ À õ×ÀÀGrpcCodeBitmaskÁø
øˆÀ
û×ÀÀþƒÀ÷InternalBitFlagsÁ
ˆ÷÷ƒ÷÷÷÷Ö÷ï
÷÷§ù÷ ÷
FLAGSÁ__bitflags_flag_namesÁBitsÁ´from_bits_retainÁ all_namedÁœ ALL_NAMEDÁOKÁ CANCELLEDÁUNKNOWNÁINVALID_ARGUMENTÁDEADLINE_EXCEEDEDÁ NOT_FOUNDÁALREADY_EXISTSÁPERMISSION_DENIEDÁRESOURCE_EXHAUSTEDÁFAILED_PRECONDITIONÁABORTEDÁ OUT_OF_RANGEÁ
UNIMPLEMENTEDÁINTERNALÁ UNAVAILABLEÁ DATA_LOSSÁUNAUTHENTICATEDÁ·`Á`Ò`á`ù`’a£a¹aÒaìa‡b–bªb¿bÏbâbób÷ À PrimitiveÁÀÕ\÷ Ã>÷
Å×÷Ç×÷ÉÉþË ÷ÍÉ÷Ï÷÷Ñbits_mutÁ÷ÓemptyÁÓ£Ó´Ó from_bitsÁÓfrom_bits_truncateÁÓý_Ó from_nameÁÚÇ_ÛÓis_emptyÁÓis_allÁÓ
intersectsÁÓcontainsÁÓinsertÁÓremoveÁÓtoggleÁÓsetÁÓ intersectionÁÓCÓ
differenceÁÓsymmetric_differenceÁÓ
complementÁÛ·`ÛÁ`ÛÒ`Ûá`Ûù`Û’aÛ£aÛ¹aÛÒaÛìaÛ‡bÛ–bÛªbÛ¿bÛÏbÛâbÛób÷û×÷ý×÷ÿ×÷×÷ƒ°ƒ±÷²÷ˆ°ˆµ÷÷°¯÷°÷°Ú÷Û÷ °
÷!šextendÁ¥÷"ùž¥ž÷#¡ù¡
iter_namesÁ÷$¤¤IntoIterÁ¤ê÷%¨£e¨£¨´¨Àe¨Ñe¨ý_¨óe¨‘f¨¡f¨¯f¨Áf¨Ñf¨ßf¨íf¨ûf¨†g¨C¨¡g¨³g¨Ïg÷&½×÷'¿×÷(Á×÷)Ã×÷*Űű÷+Ȳ÷,ʰʵ÷-Í÷.ϰϯ÷/Ò°÷0Ô°ÔÚ÷1×Û÷2Ù°Ù
÷3Ü¿jÝ¥÷4ßùà¥à÷5ãùãüj÷6ææ›kæêÀGrpcErrorsAsFailuresÁê
success_codesÁÀì×ÀîƒÀGrpcEosErrorsAsFailuresÁð¥oÀò×ÀôƒÀGrpcFailureClassÁöCodeÁ÷
÷ˆöË<ú
úˆÀý×ÀParsedGrpcStatusÁÿSuccessÁ
ÿ
NonSuccessÁ
ˆÿGrpcStatusHeaderMissingÁ
ÿHeaderNotStringÁ
ÿ HeaderNotIntÁ
À×ÀÀŽÀÖìMapFailureClassÁÝQ±ìƒìStatusInRangeAsFailuresÁžrangeÁ ×¢ƒStatusInRangeFailureClassÁ¤
StatusCodeÁ¥
¥ˆ¤Ë<¨
¨ˆ«×SharedClassifierÁ­­
classifierÁ°°×³³ƒClassifiedResponseÁÙ@í@ȹ
¹ˆ RequiresEosÁ¼
¼ˆ ¿Ù@¿í@¿×ServerErrorsAsFailuresÁÃÊO
Ń Ç× É>ServerErrorsFailureClassÁˈtÌ
̈ËË<Ï
ψ
Ò× LatencyUnitÁÔSecondsÁÕ
ÔMillisÁ×
ÔMicrosÁÙ
ÔNanosÁÛ
߃á×






&
&
&
'
+
+
+
,
,
-
I
I
I
J
J
W
W
W
i
i
i
j
j
k
k
u
u
u
v
v
z
z
z
{
{
ˆ
ˆ
ˆ
Œ
Œ
Œ
¢
¢
¢
£
£
¤
¤
¥
©
©
©
ª
ª
«
«
°
°
°
±
±
²
²
Ð
Ñ
Ò
Ó
Ô
Ö
×
Û
Û
Û
ß
ß
ß
à
à
Ž
 
 
 
¡
¨
¨
¨
¨
­
®
®
®
±
±
µ
µ
Þ
à
ä
å
è
è
è
é
ü
ü
ü
ƒ

Œ

 
¢
¥
¥
¥
´
´
¾
¾
Ã
Å
Ì
Í
Ù
Ú
Þ
Þ
Þ
å
ç
ê
ê
ê
õ
ü
ü
ü






š
š
š
£
ª
ª
ª
´
»
Æ
É
É
É
Ï
Ô
Ô
Ô
à
ç
ç
ç
è
é
û
û
û

Á
Í
Í
Í
ó
ö
ö
ö
ü
ü
ü
ÿ

Š
Š
Œ
Ž
Ž




š
Æ
Æ
Æ
È
È
È
Ë
Î
Ò
Ö
Ú
Ý
Þ
ß
à
á
â
ã
ä
ü
ü
ü
þ
þ
þ







Œ



¢
£
«
¯
°
±
²
³
´
µ

·
¾
¾
¾
À
À
À
Â
Â
Â
Ä
Ä
Ä
É
Î
Ó
Ø
Ý
ä
å
í
í
í
ï
ó
ó
ó
õ
þ
þ
þ
Œ
Œ
Œ



š
¡
¡
¡
£
¬
¬
¬
²
²
²
µ
Â
Â
Â
Æ
È
È
È
Ó
Ó
Ó
à
â
â
â
Ÿ³°ÀÊØííöJð¬ ñ­ vÞ¼z]mxŠ ²…¿c²…³²…ŸííöJð¬ ñ­ vÞ¼z]mxÐ-؇Lƒ±Õ,•Ÿ:ÍiŠ õ†¿cõ†Ÿõ†ð…ØÉLŠÿ/0˜00Œ¹00Ò00ŽM0T¿ tÄY¿cÚ‡³Ú‡ŸÚ‡è†Û¨M·MK¼‡»Ž^NØåˆŠ 刿c刳刟åˆÔˆè†ØçMž¬XŸ­X ÊËQê…ð…Š ؉¿c؉³؉ŸçMž¬XŸ­X ÊËQÖ†܆â†è†Ø¯¯÷N±±mf•ì̹È/¢‡Š ¿cŸ¯¯÷N±±mf•ì̹È/Ôˆè†Û··¸O¸ÊO~£Å{䘎ª?ØŸŒŠ ŸŒ³ŸŒ¿cŸŒŸŸŒÔˆè†Ÿ 8¡ð…͇ŸžBoxÁ¡ˆˆ¢ˆl }.xÏ¡çEçEèEGlobalÁ ¿±‡§í#Ԉ膳¥Û¿ÀÁƒPÂÖPŽ´ÛÏ×þ¶Ø¼ŽŠ ¼Ž¿c¼ŽŸ¼ŽÔˆè†ŸÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¼Žè†Ôˆè†ØÊÊÆPÌ-ÕN³°t—硊 ¿c³ÊÊÆPÌ-ÕN³°t—ç¡¤ØØØ·QÛÝQÜ-â$™
eÂÍ ‘š‘Š ­‘¿c­‘%ØØ·QÛÝQÜ-â$™
eÂͤôôRequestÁöheadÁ¦÷¦+¦Œ4ñŠ|å<¿cëëíRï›Sð©Sñ-òè7óÈSôÄõÛSö¦+ôr©ãt_" ‘ð…î“íëëíRï›Sð©Sñ-òè7óÈSôÄõÛSö¦+ôr©ãt_"¤¯Ž‚ØëëíRï›Sð©Sñ-òè7óÈSôÄõÛSö¦+ôr©ãt_" <ؽ½¾ýX¿ˆ Ò ‡Î’T¿cÂÄÅÛÆˆÇÈÔYÉÊ©ql‰•uŽ€òÔˆÛÎÏЫÑÒ¤ZÓÔºZÕÖÎZרêZÙÚ‡[ÛÜœ[ÝÞ¶[ßàÓ[áâñ[ ã
忤\ çè»\ éêÕ\
ëìê\íî‚]ïð—]Â(‹yüÂþØô—Š ô—¿cô—éô—éô—ô ô õ ¨÷ ˆÐ  mjçítoé¿cøøùÞ]úˆÀ ŸŽ\Õ¹Q:œÛØŠ Û¦^ƒˆÀ e 8DíÝ]Øê›Š ê›Ðì꛵ßê›ê›ê›íßê›ê›ºê›šeê›F{³ê›¿cê›Äcê›ïyê›àê›éê›Ècê›Æcê›Êcê›Ìcê›–úê›ê›•˜ê›ê›¶ûê›ê›̘ê›ê›öøê›ê›Þ—ê›ê›ïê›ê›œöê›ê›•!ê›ÐLê›ê›ÃLê›ê›ÇLê›ÈcÆcÊcÌc–ú•˜¶û̘öøÞ—ïœö•!ÐLÃLÇL¿cêê‰oë¥oÀx•½3k»TØ£¡³£¡À£¡¿cððÔoñ¥oÀ|/J®ÃÏ|Øù¡Êù¡¿cö÷ø­pùˆúûË<üˆ0¿-éë×ÄcÄ¢¿cÿ€qƒ”qˆ³qˆ×qŠóq”7µö¥´QÐ잣µßž£ž£ž£Ø¸rÝQì±ìÄýüňÑŠ ½¤¿c½¤À½¤Ê½¤¿cžž¡sŸÀs„ r]€¦›Ø¶¥À¶¥¿c¤¥¦ˆt§ˆ¨©Ë<ªˆ2€Å0xõõÄc¦¿c­­Ét¯ét‘&OõžàÖ÷¤ØÛ¦°Û¦¿c¹ºÈ»ˆ¼½äu¾ˆÄ‚à­»‚¹Ù@í@ÊÒÒ€IÔ IÕ²I—Ñò6A{†”¯Ž¿c…¨ØÃávÄÊOŸ}ôÅQ/¤I¿cÕ¨³Õ¨ÀÕ¨¿cËÌ͈tΈÏÐË<шºûIÃY¯’ÊÄc«©Š ÔÕÖÖwרêwÙÚýwÛÜxgõ˜@ܽ Û…ªØ…ª¿c…ªòí ²¯º·Å¿ÍÊÝØÀ½òÎþøîêô𢞳­ÅÃßÔö혤µ¯¼·Ç¿ÐÊáØôÎøÝÔùí$§s¯·È¿ÒÊäØ÷ëËÂõÎûøÅìêòðýöÿù ž«¤°­¿ÜÒÇÃÒËáÔýíDR«½·ÕÊÃÕêÉÃí'FTdv¯·¥
¬Ø¿ÜÖ¿¹·Ä¿ñÎýøÞÔ¼ŠÊ˜Ø±ë·¹ë¢ëÏÎÑÎψÿŽÿÿøÀøÇçö¤¤éËÉÍû½øý¿øÿÁøÃøƒÅøÈøˆÊøÍøÏøÒøÔø×øÙøšÜøßø¤æøÛêýžâÃâðÖÒ¹­Ø¸Š ¿cb³ Ÿ =ÛF³1&Ú%“í‚Ø
éÐìµßíߺšeF{ÄcïyàÈcÆcÊcÌc–ú•˜¶û̘öøÞ—ïœö•!ÐLÃLÇLÀʰü˜T ; ëë
HeaderNameÁìÝQÃŽ4LÓNç¢ivƒ 
Àµ ëü÷v;­¶½µνµÖ¿µü™SÀµ¬ŸÀµÀµÜνµg*ÁÀµ,ÏÀµ.äÀµ^fÁÀµiqÏÀµt|äÀµ¨ Àµœ«;½µÇ¿µòÀµïÀµíÀµëï ÁÀµÏÀµäÀµñxóŒF
 ±xóŒF
®œ˜9ùxÛŒ7Fž!xìŒF,
z﹜ѬsŸmç
îâï¹œŠ Ü êÖýP
XM﹜à H¡WDlÀ
Ƚ﹜ü ð¸¢Ç´Ü0
8-﹜µ! `(£7$L 
¨ï¹œî!@И¤§¼

﹜§"@¥,
ˆ}﹜à"°x¦tœð
øí﹜™# è§÷ä `
h]﹜Ò#X¨gT|Ð
ØÍ﹜‹$È©×Äì@
H=﹜Ä$p8ªG4\°
¸­ï¹œý$ ਫ·¤Ì 
(﹜¶%@P¬'<
˜ï¹œï%Àˆ­¬
ý﹜¨&0ø®ôùx‹’ûF
 FlagÁÐ Ff»Ffz§ºÔ./vƒ 
ìÈ x…šF x“šFùx… FáÉùx’(FéÈìéÈôëÈùxŒ’úFìÈšêFìÈšêFìÈšêFìÈšêFìÈšêFìÈšêFìÈšêFìÈšêFìÈšêFìÈšêFìÈšêFìÈšêFìÈšêFìÈšêFìÈšêFìÈšêFìÈšêFéÈùD#©x‡•F¯ yx¥•Fž#°ØÌŸ;±ØÌ5 S²ØÌM¡k³ØÌe¢ƒ´ØÌ}£µØÌ¤³ØÌ­¥Ë·ØÌÅ¦ã¸ØÌݧû¹ØÌõ¨ºØÌ©-»ØÌ(ªG¼ØÌB«a½ØÌ\¬{¾ØÌv­¿ØÌ®µéÈùxõ”GF‰xõ”F
Fvï¯ØÌüîžûGMG¯Ð,°ØÌ9+Ÿ8НÐi±ØÌvh uÁÇÁ¯Ð¦²ØÌ³¥¡²þÿ¯Ð䳨Ìñã¢ð<C>¯Ð$´ØÌ1#£0|ƒ~¯ÐdµØÌqc¤p¼Ã¾¯Ð¤ØÌ±£¥° üþ¯Ðä·ØÌñã¦ð
 <C> ¯Ð$¸ØÌ1#§0 
|ƒ~
¯Ðd¹ØÌqc¨p  ¼Ã¾ ¯Ð¤ºØÌ±£©°
 üþ ¯Ð仨Ìñãªð
<C>
¯Ð$¼ØÌ1#«0|ƒ~¯Ðd½ØÌqc¬p¼Ã¾¯Ð¤¾ØÌ±£­°üþ¯Ðä¿ØÌñã®ð< ìÈ 
  
Wf¹éȃëÈìÈŠìÈìÈìÈ{ìÈvìÈqìÈlìÈgìÈbìÈ]ìÈXìÈSìÈNìÈIìÈDìÈ?ìÈ:- ",¯ØÌ'žF°ØÌAŸ`±ØÌ[ z²ØÌu¡³ØÌ¢®´ØÌ©£ÈµØÌäâØÌÝ¥ü·ØÌ÷¦¸ØÌ§0¹ØÌ+¨JºØÌE©d»ØÌ_ª~¼ØÌy«˜½ØÌ¬²¾ØÌ­­Ì¿ØÌÇ®ØÌ"OK"Á ØÌ "CANCELLED"ÁØÌ "UNKNOWN"ÁØÌ"INVALID_ARGUMENT"ÁØÌ"DEADLINE_EXCEEDED"Á ØÌ "NOT_FOUND"ÁØÌ"ALREADY_EXISTS"ÁØÌ"PERMISSION_DENIED"ÁØÌ"RESOURCE_EXHAUSTED"Á ØÌ"FAILED_PRECONDITION"Á
ØÌ "ABORTED"Á ØÌ"OUT_OF_RANGE"Á
ØÌ"UNIMPLEMENTED"Á
ØÌ
"INTERNAL"Á ØÌ
"UNAVAILABLE"Á ØÌ "DATA_LOSS"ÁØÌ"UNAUTHENTICATED"Á‰ ixˆFÙx˜F
)xÍFF
šêF!x¤ŸFùx¬Ÿ)F F|áÉ xÖŸF ùx¬Ÿ,F# ùx«Ÿ-F xØŸFùxûŸF yxþŸF
!xþŸF   #
*Axƒ F
Fy :
Qxƒ FX
 xŒ F IxÀ F   ™xÌ F
axÌ F !xÌ F )
0)xÑ F
Fx:9xÑ F\ x× F
!xÙ F
«
1xÙ F xÞ Fùx´ +F
 
 
& xß FùxŽ tF ' x‚¡F 
¸ x¡F
  1x¤¡F x©¡F* *
PùxþžËF xÈ¡F  ñŸêFšêF F|áÉ    þùõïëò 
ê°ä
â6 ßÛâØÔÛÑØ÷
ÿÐÈå È Å@
HÓæP
¾º
ÑØ³¯¸=Ò«´`¨¯¥ ¡Ç  È
ï  ©¢ óŸêFšêF!£"Ÿ#¦#¯F|áÉœ$£$%#¦&$%¸ &%$"#$$'(ƒ)Š)"£
«°ä)³(zÎ( w)s*z*p+l,s-i.p."
hÈå.-`¸,-].Ø
à[“æ,è+VR,N
*+i+p*K-G'PÕj)C'Lø@(G'=/9_ /`
/8!A3#:" õŸêF!šêF0;172>2GF|áÉ43;3142>534P 543.123)3%678"81;
C°ä8K7f7 8 99:; <==1'
/Èå=1<øP;<õ=p
xó“æ;:îê;æ
9::9ã<ß6èm  8Û6ä Ø7ß6Õ>Ñ÷ >ø
>Ð0ÙË2Ò1 ÷ŸêF0šêF?Ó
@Ï
AÖ
Aß
F|áÉÌ
BÓ
BÉ
CAÖ
DBCè
 DCB!Æ
@ABÁ
B½
E·
F³
Gº
G@Ó

Û
²
°äGã
F"ª
þ
F&# §
G£
Hª
H 
Iœ
J£
K
L 
L@¿

Ç
˜
ÈåLÉ
K$
è
JK
L 
 
“æJ I%

J~

HI
I 
H{
Kw
E
 'š Gs
E|
( 'p
Fw
Em
Mi

 M
(
·
Mh
?q
c
Aj
@ ùŸêF?šêFNk
Og
Pn
Pw
F|áÉd
Qk
Qa
RPn
SQR
 SRQ)^
OPQY
QU
TO
UK
VR
VOk

s
J
°äV{
U*B

U.+ ?
V;
WB
W8
X4
Y;
Z1
[8
[OW

_
0
Èå[a
Z,(

YZ%
[ 

¨
#
“æY°
X-

Y

WX1
X8
W
Z
T
/2V
T
À/
U
T
\
'
 \(
0
O
\
N
û P
O ûŸêFNšêF]^ÿ__F|áÉü``ùa_b`a ba`1ö^_`ñ`í cç dã eê e^
  â°äed2Ú. d63 × eÓ fÚ fÐ gÌ hÓ iÉ jÐ j^ï
÷ ÈÈåjùi4À hi½ j8
@ »“æhHg5² h® 
fgÉ gÐ f« i§ c°5 7Ê e£ c¬X 7  d§ c k¿ kÀ8
ç k˜]¡_š^ ýŸêF]1ÿšêFlmnžn§F|áÉoopnžqop° qpo9Žmnoo
r
s{
t
tm
£
z°ät«s:rÆ
s>; o
tk
ur
uh
vd
wk
xa
yh
ym

`Èåyx<X°
wxU
yÐ
Ø
S“æwàv=NJ
wF

uva
vh
uC
x?
rHÍ
?b
t;
rDð
?8
s?
r5
z1W
zX@

z0l9+n2m ÿŸêFl1šêF{3|/}6}?F|áÉ,~3~)}6~I ~A(|}~#~   ƒ ƒ|9
A °äƒJBf FC  ƒ
        ˆ ˆ|0
8  Èåˆ;D[  ˆ~
 “æEþú ÷ 
  ø õ ÿ G ƒó ý© Gñ ù ð í H
< î{÷é}ð| ŸêF{šêFŠòïŒ÷ŒF|áÉîö펌üŽ ŽIòŒðí è å í 
 ç°äJá5 NK ß Ü ä Û Ø à × ß 
 ÙÈå LÓ+ Ò N
V Ñ“æ_MÎÊ Ç 
ä ì È Å ÏT Oé à Íy OÁ É À ˜½ã ˜åP
  ˜¾ŠÈºŒÂ ƒŸêFŠ1…šêFÆšÃËÕF|áÉœʜÁОœå žœQÆšœÄœÁ
Ÿ¼
 ¹
¡Á
¡šÜ
ä
»°ä¡í Rµ 
 VS ³
¡°
¢¸
¢¯
£¬
¤´
¥«
¦³
¦šÔ
Ü
­Èå¦ß¥T§ÿ
¤¥¦
¦"
*
¥“æ¤3£U¢ž
¤

¢£¸
£À
¢œ
¥
Ÿ£(
W½
¡
Ÿ¡M
W
 
Ÿ
§·
§¹X
à
§œŽšŸêF1‡šêF¨š©ªŸª©F|áÉ«ž«¬ª¤­«¬¹ ­¬«Yš©ª«˜«®¯°°©°
¸°ä°Á¯Zݯ^[ °±Œ±ƒ²³ˆ´µµ©¨
°Èåµ³´\{Ó³´zµö
þy“æ³²]vr³o
±²Œ²±p´m®wü_°k®u!_i¯q®he `
´f¨pbªj©ŸêF¨1‰šêF·n ¸k ¹s ¹} F|áÉj ºr ºi »¹x ¼º»  ¼»ºan ¸¹ºl ºi ½d ¾a ¿i ¿¸
Œ c °ä¿• ¾b] ± ¾fc [ ¿X À` ÀW ÁT Â\ ÃS Ä[ ĸ| 
U Èåć ÃdO § ÂÃN ÄÊ 
Ò M “æÂÛ ÁeJ F ÂC 
ÀÁ` Áh ÀD ÃA ½K Ð!ge!¿? ½I õ!g= ¾E ½< Å9 _  Åa h
ˆ Å: ·D 6 ¹> ¸ŸêF·1‹šêFÆB#Ç?#ÈG#ÈQ#F|áÉ>#ÉF#É=#ÊÈL#ËÉÊa# ËÊÉiB#ÇÈÉ@#É=#Ì8#Í5#Î=#ÎÇX#
`#7#°äÎi#Íj1#…#Ínk /#Î,#Ï4#Ï+#Ð(#Ñ0#Ò'#Ó/#ÓÇP#
X#)#ÈåÓ[#Òl##{#ÑÒ"#Óž#
¦#!#“æÑ¯#Ðm##Ñ#
ÏÐ4#Ð<#Ï#Ò#Ì#¤$o9$Î#Ì#É$o#Í#Ì#Ô
#3# Ô5#p
\#Ô#Æ#
#È#ÇŸêFÆ1šêFÕ&Ö&×&×%&F|áÉ&Ø&Ø&Ù× &ÚØÙ5& ÚÙØq&Öר&Ø&Û &Ü &Ý&ÝÖ,&
4& &°äÝ=&Ür&Y&Üvs &Ý&Þ&Þÿ%ßü%à&áû%â&âÖ$&
,&ý%Èåâ/&át÷%O&àáö%âr&
z&õ%“æàƒ&ßuò%î%àë%
Þß&ß&Þì%áé%Ûó%x'w
'Ýç%Ûñ%'wå%Üí%Ûä%ãá%& ã &x
0&ãâ%Õì%Þ%׿%Ö ŸêFÕ1šêFäê(åç(æï(æù(F|áÉæ(çî(çå(èæô(éçè ) éèçyê(åæçè(çå(êà(ëÝ(ìå(ìå)
)ß(°äìzÙ(-)ë~{ ×(ìÔ(íÜ(íÓ(îÐ(ïØ(ðÏ(ñ×(ñåø(
)Ñ(Èåñ|Ë(#)ïðÊ(ñF)
N)É(“æïW)î}Æ(Â(ï¿(
íîÜ(îä(íÀ(ð½(êÇ(L*á)ì»(êÅ(q*¹(ëÁ(ê¸(òµ(Û( òÝ(
)ò·(äÁ(³(æ»(å ŸêFä1‘šêFó¿+ô¼+õÄ+õÎ+F|áÉ»+öÃ+öº+÷õÉ+øö÷Þ+ ø÷öÀ+ôõö¾+ö»+ù¶+ú³+û»+ûôÖ+
Þ+µ+°äûç+ú°+,úƒ °+û­+üµ+ü¬+ý©+þ±+ÿ¨+°+ôÑ+
Ù+ª+ÈåÜ+ÿ¥+ý+þÿ¤+ ,
(,£+“æþ1,ý¡++þš+
üý·+ý¿+ü›+ÿ˜+ù¢+'-½,û—+ù¡+M-–+úž+ù•+’+¸+ º+ˆâ+”+óž++õ˜+ôŸêFóIx±¢F xË¢F ùxØœõFùx„ÈFùxɃFùx Ÿ©F
%+17=CIOU[agùx’¢:FîÌ/­/´, ìÈ‹/áɉ/m/_/f///ÓÁ/².¤. ¥.§Â®.ÓÁ¦.-9-ÓÁ
0áÉ 0ï/á/è/š/”/ÓÁ/4/&/§Â$/§Â-/ÓÁ%/ÅÂ
.¶-ÓÁŠ0áɈ0l0^0e000ÓÁ0±/£/§Â¡/§Âª/ÓÁ¢/ÅŠ.3.ÓÁ1áÉ1é0Û0â0”0Ž0ÓÁŒ0.0 0§Â0§Â'0ÓÁ0ÅÂ/°.ÓÁ„1áÉ‚1f1X1_11 1ÓÁ 1«00§Â›0§Â¤0ÓÁœ0Å„/-/ÓÁ2áÉÿ1ã1Õ1Ü1Ž1ˆ1ÓÁ†1(11§Â1§Â!1ÓÁ1ÅÂ0ª/ÓÁ~2áÉ|2`2R2Y2 22ÓÁ2¥1—1§Â•1§Âž1ÓÁ–1ÅÂ~0'0ÓÁû2áÉù2Ý2Ï2Ö2ˆ22ÓÁ€2"22§Â2§Â2ÓÁ2ÅÂû0¤0ÓÁx3áÉv3Z3L3S33ÿ2ÓÁý2Ÿ2‘2§Â2§Â˜2ÓÁ2ÅÂx1!1ÓÁõ3áÉó3×3É3Ð33|3ÓÁz333§Â 3§Â3ÓÁ
3ÅÂõ1ž1ÓÁr4áÉp4T4F4M4ÿ3ù3ÓÁ÷3™3‹3§Â‰3§Â’3ÓÁŠ3ÅÂr22ÓÁï4áÉí4Ñ4Ã4Ê4|4v4ÓÁt444§Â4§Â4ÓÁ4ÅÂï2˜2ÓÁl5áÉj5N5@5G5ù4ó4ÓÁñ4“4…4§Âƒ4§ÂŒ4ÓÁ„4ÅÂl33ÓÁé5áÉç5Ë5½5Ä5v5p5ÓÁn555§Â5§Â 5ÓÁ5ÅÂé3’3ÓÁf6áÉd6H6:6A6ó5í5ÓÁë555§Â}5§Â†5ÓÁ~5ÅÂf44ÓÁã6áÉá6Å6·6¾6p6j6ÓÁh6
6ü5§Âú5§Â6ÓÁû5ÅÂã4Œ4ÓÁ`7áÉ^7B747;7í6ç6ÓÁå6‡6y6§Âw6§Â€6ÓÁx6ÅÂ`5 truncatedÁ=8´"8flagÁü7ÅÑ 8ÅÑ8"ÅÑ#81ÅÑ08@ÅÑ=8OÅÑJ8 ^ÅÑW8
mÅÑd8 |ÅÑq8 ÅÑ8
šÅÑ8©ÅÑ›8¸ÅÑ©8ÇÅÑ·8ÖÅÑÅ8åÅÑÓ8ô+
49æ8F|áÉö8F|áÉ9F|áÉ9F|áÉ&9F|áÉ69F|áÉF9F|áÉV9F|áÉf9F|áÉv9F|áɆ9F|áÉ–9F|áɦ9F|áɶ9F|áÉÆ9F|áÉÖ9F|áÉæ9F|áÉù•×$!F Ù•Ü$Fó’FÔù–»’8Fê›!–Ó’F NEi•¿%FÙ•Ï%F
)•„&FŒ&F
1˜šêF!•Û'Fù•â'4F ù•â',Fù•â')F F|áÉŒ(F   F
R 
c  
v 
ž)•(FÈå¢9•(FÅ•(Fù•â';F

!•—(F“æ1•—(F œ(F(F  I•Ì(F   !•Ø(F
 
á•À(F
 
Û(F
  1•þ(Fƒ)F* *Pù•µ'îF¢)F ˜ŸêFšêF)%,!#,F|áÉ \i{ ±
¹ÈåºÚ
“æ

  ýú
öýóï =î÷é šŸêFšêF
  F|áÉþ!!A" N#!"` #"! t !
žÈåŸ
þ¿û÷
ÿó“æï ï ëç!î õå$ì$â%é%ß
$%Û%â$Ø&Ôú &û "&ÓÜÎ œŸêFšêF'ó(ï)ö*ë+æ,í,öF|áÉã-ê-&.,3/-.E /.-
Y+,-{
ƒæÈå+*ã¤)*à+Ü
䨓æ)Ô(Ô Ð)Ì-Ó,Ú*Ê0Ñ0Ç1Î1(Ä
01À1Ç0½2¹ß 2à2¸'Á³( žŸêF'1 šêF3Ø4Ô5Û6Ð7Ë8Ò8ÛF|áÉÈ9Ï9 :8;9:* ;:9>789`
hËÈå7i6È56Å7Á
ɽ“æ5¹4¹ µ5±9¸8¿6¯<<¬=³=4©
<=¥=¬<¢>žÄ >Åì>3¦˜4  ŸêF3šêF?½ @¹ AÀ Bµ C° D· DÀ F|áÉ­ E´ Eð FDý GEF
 GFE#
CDEE

M
° ÈåCN
B­ n
ABª C¦ 
® ¢ “æAž
@ž š A E D¤ BH H I˜ I@Ž 
HIŠ I HJƒ ©  Jª Ñ J ? } @ ¢ŸêF?šêFK¢ Lž M¥ Nš O Pœ P¥ F|áÉ Q QÕ RPâ SQRô  SRQ OPQ* 
2  ÈåO3 N S MN O 
  “æMƒ Lƒ  M{ Q P Ny T Tv U} ULs 
TUo Uv Tl Vh Ž V  Vg Kp b L ¤ŸêFKšêFW
Xƒ
YŠ
Z
[z
\
\Š
F|áÉw
]~
]º
^\Ç
_]^Ù
 _^]í
[\]
z
Èå[Zw
8YZt
[p

x
l
“æYhXh
d
Y`
]g
\n
Z^
`e
`[
ab
aXX

`aT
a[
`Q
bM
s
bt
 
bL
WU
G
X ¦ŸêFWšêFcldheofdg_hfhoF|áÉ\iciŸjh¬kij¾ kji!Òghiô
ü_Èågýf"\efYgU
]Q“æeMd#M IeEiLhSfC lJ l@ mG md= 
lm9 m@ l6 n2X nY$ n1c:,d ¨ŸêFcšêFoQpMqTrIsDtKtTF|áÉAuHuvtwuv£ wvu%·stuÙ
áDÈåsâr&Aqr>s:
B6“æq2p'2 .q*u1t8r( x/ x% y, yp" 
xy y% x z= z>(e zop ªŸêFošêF{6|2}9~.)1;F|áÉ(0m|ƒ ƒ)¨Ì
Ô7ÈåÕ~*4õ}~1-
5)“æ}%|+% !}%-~
%

$
|


!

;
=,d
{| ¬ŸêF{šêF7ˆ4<Š2.Œ6Œ@F|áÉ-5rŽŒŽ Ž-­ŒÒ
Ú=ÈåÜŠ.<ýŠ;8
@4“æ1ˆ/2 .+3Œ;Š,4+3ˆ+
)1(%K M0t&0"ˆ ®ŸêFšêFJGOEA˜I˜SF|áÉ@Hš˜š© š1À˜å
íPÈåï2ONK
SG“æD3E A>F˜N?œGœ>F>
œ<Dœ;ž8^ ž`4ž9C5 °ŸêFšêFŸ] Z¡b¢X£T¤\¤fF|áÉS¥[¥˜¦¤§§¥¦¼ §¦¥5Ó£¤¥ø
cÈ壢6b#¡¢a£^
fZ“æ¡W 7X T¡Q¥Y¤a¢R¨Z¨Q©Y© Q
¨©O©W¨NªKq ªs8šªLŸVH  ²ŸêFŸšêF«p¬m­u®k¯g°o°yF|áÉf±n±«²°º³±²Ï ³²±9毰± 
vÈ寮:u6­®t¯q
ym“æ­j¬;k g­d±l°t®e´m´dµlµ¬d
´µbµj´a^ <­_«i[¬ ´ŸêF«šêF·ƒ¸¹ˆº~»z¼¼ŒF|áÉy½½¾¾¼Í¿½¾â ¿¾½=ù»¼½
&Èå»(º>ˆI¹º»
Œ“æ¹}¸?~ z¹w½¼ºxÀÀwÁÁ¸w
ÀÁuÁ}ÀtÂq Â@ÀÂr·|n¸ŸêF·šêFÃÄÅÆÇÈÈŸF|áÉŒÉÉÑÊÈàËÉÊõ ËÊÉA ÇÈÉ1 
9 œÈåÇ; ÆB\ ÅÆšÇ
Ÿ“æÅ ÄC ÅŠÉÈšÆÌÌŠÍÍÄŠ
Ì͈ÍÌΪ άD
ÓÎÃÄ ¸ŸêFÃI•*FÏ Ïy•‹*F Ï™*FÏ«*F †”FÕù–Ò“4Fù•»%ñFù•€&¬Fù•×F
%+17=CIOU[agù•ì)@FÐê›!–è“F#ó"Ö Í"§ÂË"§ÂÔ"ÓÁË"áÉÈ"¬"ä"ë"Ñ!Ã!ÅÂ!:!1#§Â/#§Â8#ÓÁ/#áÉ,##H#O#5"'"ÅÂõ!ž!•#§Â“#§Âœ#ÓÁ“#áÉ#t#¬#³#™""ÅÂY""ù#§Â÷#§Â$ÓÁ÷#áÉô#Ø#$$ý"ï"Ž"f"]$§Â[$§Âd$ÓÁ[$áÉX$<$t${$a#S#ÅÂ!#Ê"Á$§Â¿$§ÂÈ$ÓÁ¿$áɼ$ $Ø$ß$Å#·#ÅÂ…#.#%%§Â#%§Â,%ÓÁ#%áÉ %%<%C%)$$ÅÂé#’#‰%§Â‡%§Â%ÓÁ‡%áÉ„%h% %§%$$ÅÂM$ö#í%§Âë%§Âô%ÓÁë%áÉè%Ì%& &ñ$ã$ű$Z$Q&§ÂO&§ÂX&ÓÁO&áÉL&0&h&o&U%G%ÅÂ%¾$µ&§Â³&§Â¼&ÓÁ³&áɰ&”&Ì&Ó&¹%«%ÅÂy%"%'§Â'§Â 'ÓÁ'áÉ'ø&0'7'&&ÅÂÝ%†%}'§Â{'§Â„'ÓÁ{'áÉx'\'”''&s&ÅÂA&ê%á'§Âß'§Âè'ÓÁß'áÉÜ'À'ø'ÿ'å&×&ÅÂ¥&N&E(§ÂC(§ÂL(ÓÁC(áÉ@($(\(c(I';'Å '²&©(§Â§(§Â°(ÓÁ§(áɤ(ˆ(À(Ç(­'Ÿ'ÅÂm''
)§Â )§Â)ÓÁ )áÉ)ì($)+)((ÅÂÑ'ͤÑÒ)´·)ÅÑŽ)ÅÑ›)ÅѨ)Åѵ)(ÅÑÂ)4ÅÑÏ)@ÅÑÜ) LÅÑé)
XÅÑö) dÅÑ* pÅÑ*
|ÅÑ*ˆÅÑ+*ÅÑ9* ÅÑG*¬ÅÑU*¸ÅÑc*ÄlÄ*X*F|áÉh*F|áÉx*F|áɈ*F|áɘ*F|áɨ*F|áɸ*F|áÉÈ*F|áÉØ*F|áÉè*F|áÉø*F|áÉ+F|áÉ+F|áÉ(+F|áÉ8+F|áÉH+F|áÉX+F|áÉ1•ã*Fó•FÖù–¹•:F[7 ê›1–Ë•F7I•º+Fñ•Æ+F!•ß+F !
(祮+F
Ø5Hã+Fù•Æ+ Fæ+F‰•€,FI•€,F !•,F 7H,F Q•Ú,F!•ß,F   !  ã,F ù•¬,9F Û¼ê›ä,Fù•ý+áFù•›--F Û¼ê›8Ý-Fï-F˜F×ù–ž—rFù•¶+ºF
Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙê›ù–×-F)–µ—F@ê›>;ÖÓÅꛈ´Q¤ÑÛ¡•¹.F!•¹.F i•À.FY•À.F
I•À.F
Õ-<l Ì.F Ñ•´.F Í.Fß.FÖ™FØù–û˜[Fê›!–©™F)–›™Fþúëê›è´-W!•§/F Q•¢/F «/F„›FÙù–­šWFê›!–ÙšF)–ËšF}´AØÌ"OK"Á ØÌ "CANCELLED"ÁØÌ "UNKNOWN"ÁØÌ"INVALID_ARGUMENT"ÁØÌ"DEADLINE_EXCEEDED"Á ØÌ "NOT_FOUND"ÁØÌ"ALREADY_EXISTS"ÁØÌ"PERMISSION_DENIED"ÁØÌ"RESOURCE_EXHAUSTED"Á ØÌ"FAILED_PRECONDITION"Á
ØÌ "ABORTED"Á ØÌ"OUT_OF_RANGE"Á
ØÌ"UNIMPLEMENTED"Á
ØÌ
"INTERNAL"Á ØÌ
"UNAVAILABLE"Á ØÌ "DATA_LOSS"ÁØÌ"UNAUTHENTICATED"Á1•—:F ù•—:%FÙ•¡:F»:F’ŸFÝù–ΞDF!–ïžF•°ù–Ì•ž FAz±•¦<Fi•¦<FY•¦<F
I•¦<F·¶+ :1•¶<F o
»<F 1•À<F ù•¦< FÅ<F ×<Fº FÞù–úŸ@F!–™ F•°ù–Ì•È
Fê›ä°8a
œ=F1•œ=F 9•¥=F @ «=F ù•œ=/FÙ•°=FÊ=Fü¡Fßù–¦¡VF!–סF•°ù–Ì•ø Fê›1–Æ¡FãßË4¹
1j£
Ÿ>F1•Ÿ>F 9•¨>F @ ®>F 9•³>F Ù•Ÿ>F¹>F º£Fàù–è¢RF!–—£F•°ù–Ì•¸
Fê›1–†£FñíÙ¦;¹
8q
DF1•DF 9•ŠDF ? DF ±•üCF ‘DFƬFåù–í«YFê›!–Ÿ¬Fê›ù–Ì•ÀFê›1–ެF×ÓÀ4¹
1l
çDF1•çDF 9•ðDF ?
öDF ±•âDF ÷DF•®Fæù–Ê­KFê›!–õ­Fê›ù–Ì•Fê›1–ä­F×ÓÀ4¹
1l
‰•ÒEF1•ÒEF A•ÛEF9•ÜEF %âEFa  ¹•ÍEF ãEF¼±Fçù–ç°UFê›!–—±Fê›ù–Ì•¸Fê›1–†±FôðÝÙ;¹
8s
ÈFF1•ÈFF 9•ÑFF ? ×FF ±•ÃFF ØFF³³Fèù–ʲiFê›!–„³Fê›ù–Ì•¥Fê›1–ó²F×ÓÀ4¹
1l9•ÀGF1•ÁGF %ÆGFù•§G!F

Á•§GF„±_+ÇGFµFéù–È´GFê›!–ê´Fê›ù–Ì•F¼¸JùöM.FY˜NF!˜NF #
*!NF
Ö71NF ¢NFj
qùöM!Fï¹| £NFùºN.FYÜNF!ÜNF #
*!áNF†Ñ51áNF æNFh
oùºN!Fï¹zŽ çNFùúLF
ùúL'F
Fù·M)FF|áÉæQ úNF ‰OF¢ù¨LáFF F IterÁF
ÝQFFdoneÁF¢}¶Ù+.‡ùÄL#F•°)ºLF!•°œ˜•°B©ÿF|áÉù«S.FYÍSF!ÍSF #
*!ÒSF†Ñ51ÒSF ×SFh
où«S!Fï¹zŽ ØSFùïS.FYTF!TF #
*!TF†Ñ51TF TFh
oùïS!Fï¹zŽ œTFùªR†F
ùªR,F
F$ùìR)FF|áÉ}æQ ¯TF ¾TF£ùÍQñFFF IterNamesÁFflagsÁFFidxÁFFsourceÁFF·MFAî2_ömê*ùïQ(F•°)åQFB>•°<¿»•°¹BÌ"F|áÉÑ‘Ê F
Á‘Ê F
Ô-ù‘Å F øä Fó’F©ù’»’8F!’Ó’Fê›(Á‘­
F
±‘­
F·¶+ñ‘¨
F ø Å
F†”Fªù’Ò“4F!’è“Fꛊ(1 F ê›i‘ F
 !‘ F†Ñ?1‘ F Fó•F«ù’¹•:FhN§Â1’Ë•F•°š<ù‘ï "F!Œ F "
)á‘ï F
×5I  FXù‘é (F|ù‘ç
-F Û¼
!‘Ú F Ûê›Q‘
F!
F ! ø š
Fù‘ã 9F Û¼
F ¼F˜F¬ù’ž—rFù‘¬ pFÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙù’×-F)’µ—Fž´âÞù‘¬ 3Fê›YAê›?´I´ƒÑù‘+F!‘¬F "
)ù‘%F„±4H°Fù‘1F ø±FÖ™F­ù’û˜[F!’©™F)’›™Fê›À»´Iù‘)F!‘¯F "
)ù‘#F
Ù6J³Fù‘/F ø´F„›F®ù’­šWF!’ÙšF)’ËšFê›Â½´I1F ꛉ‘F
 A˜F
ÝAQ‘˜F¡F’ŸF°ù’ΞDF!’ïžF§Âù’Ì•ž F•°¢B1íF ê›y‘íF
 1ôF
ÞAA‘ôFûFº F±ù’úŸ@F!’™ F§Âù’Ì•È
F•°¢B1ÒF ê›9‘äF ê›Ñ‘ÒF
 QÙF
ß\D™‘ÙFëF ü¡F²ù’¦¡VF!’סF§Âù’Ì•ø F1’Æ¡F•°Öê›Á/¹
,e1ÀF ê›9‘ÐF ê›Á‘ÀF
 AÇF
à\D‰‘ÇF×F º£F³ù’è¢RF!’—£F§Âù’Ì•¸
F1’†£F•°Öê›Á/¹
,eá‘ìF1‘ìF ê›9‘F ê›A
HaóF
åU?©‘óFF ù‘ç"F øˆFƬF¸ù’í«YF!’Ÿ¬Fù’Ì•ÀF1’ެFê›ê›ÿê›ì8¹
5p©‘ÞF1‘ÞF ê›9‘ëF ê›A
H)åF
æU?qåFòF Ù‘ÙF øóF•®F¹ù’Ê­KF!’õ­Fù’Ì•F1’ä­Fê›ê›þê›ë8¹
5pÑ‘ÎF1‘ÎF ê›9‘àF ê›A
HQÕF
çU?™‘ÕFçF ù‘É F øèF¼±Fºù’ç°UF!’—±Fù’Ì•¸F1’†±Fê›ê›ÿê›ì8¹
5pù‘Í$F1‘ÍF ê›9‘éF ê›B
I¡‘ÔF
èU?é‘ÔFðF ù‘È*F øñF³³F»ù’ʲiF!’„³Fù’Ì•¥F1’ó²Fê›ê›ÿê›ì8¹
5p™‘ÅF1‘ÅF ê›&
-QÌF
é:a‘ÌF×FÉ‘ÀF øØFµF¼ù’È´GF!’ê´Fù’Ì•Fê›Ìê›É!Lù”öM.FY”˜NF!”˜NF #
*!”NF“æ51”NF¢NFh
où”öM!Fï¹zŽ£NFù”ºN.FY”ÜNF!”ÜNF #
*!”áNF“æ51”áNFæNFh
où”ºN!Fï¹zŽçNFù”úLF
ù”úL'FœÓù”·M)FF|áÉxáLúNF ‰OFäù”¨LáF‡Ôù”ÄL#F§Â)”ºLFÞÚ§ÂØ[W§ÂUBmÃF|áÉù”«S.FY”ÍSF!”ÍSF #
*!”ÒSF“æ51”ÒSF×SFh
où”«S!Fï¹zŽØSFù”ïS.FY”TF!”TF #
*!”TF“æ51”TFTFh
où”ïS!Fï¹zŽœTFù”ªR†F
ù”ªR,F–Øù”ìR)FF|áÉxáL¯TF ¾TFåù”ÍQñFÙù”ïQ(F§Â)”åQFÞÚ§ÂØ[W§ÂUBmÃF|áɬ“X ½¾%â–1¸¸UriÁ¹schemeÁŒ º authorityÁŒ »path_and_queryÁŒ 
VÀ™×™¢$ÜX ÂÔˆÅ)˜—5Ôˆ=Dùl‰[F øù(4ê›<CùpÅ"F (ê›4;B$N öø%Ä¢1Ôš9@,ÿN öû%Ä¢1úHúHßûHÁ‘4Ý­f‰úM÷cjTªX ÿƒ%ž£1Ôš9@ ¤¦%¦1œˆtˆÖ oôKÐüfRgn ¤©%¦1ˆ‡9@,”L
ò§ø§ º-ª§9Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ò§\‡M
ò§ø§ ½-ª§9ø§AHTÀa
ËÍ%«©1Έ9@,´b
ËÐ%«©1ˆ‡9@ëìÔÀü¥Pü:7 `async fn(HttpRequest) -> Result<HttpResponse, Error>`Á;út? # OverviewÁNúüR`] tower-http is a library that provides HTTP-specific middleware and utilities built on top ofÁ [tower].ÁÀúüÄ^[ All middleware uses the [http] and [http-body] crates as the HTTP abstractions. That meansÁü£YV they're compatible with any library or framework that also uses those crates, such asÁüý! [hyper], [tonic], and [warp].ÁŸú¤£ # Example serverÁ¸úü¼^[ This example shows how to apply middleware from `tower-http` to a [`Service`] and then runÁü›0- that service using [hyper] and [hyper-util].ÁÌú”Ð ```rust,no_runÁ¬ã use tower_http::{Áüù&# compression::CompressionLayer,ÁÔ  trace::TraceLayer,Á };ÁüÂ63 use tower::{ServiceBuilder, service_fn, BoxError};Áüù" use http::{Request, Response};Áüœ)& use std::net::{SocketAddr, Ipv6Addr};Á¬Æ use bytes::Bytes;ÁìÜ use http_body_util::Full;Áüú1. use hyper_util::rt::{TokioIo, TokioExecutor};Áü¬1. use hyper_util::service::TowerToHyperService;ÁÞúüâfc # async fn handler(_: Request<hyper::body::Incoming>) -> Result<Response<Full<Bytes>>, BoxError> {ÁüÉ<9 # Ok(Response::new(Full::new(Bytes::from("hello"))))Á<†  # }ÁŽ ú”’  #[tokio::main]Áü¥ -* async fn main() -> Result<(), BoxError> {ÁüÓ A> let addr = SocketAddr::from((Ipv6Addr::LOCALHOST, 8000));Áü•
B? let listener = tokio::net::TcpListener::bind(addr).await?;矯
1. println!("Listening on http://{}", addr);ÁŠ ú loop {Áü 74 let (socket, _) = listener.accept().await?;ÁÕ úüÙ %" tokio::spawn(async move {Áüÿ 2/ let socket = TokioIo::new(socket);Á² úü¶ -* // Build our middleware stackÁüä 30 let service = ServiceBuilder::new()Áü˜
63 .layer(TraceLayer::new_for_http())ÁüÏ
30 .layer(CompressionLayer::new())Áüƒ)& .service_fn(handler);Á­úü±$! // Wrap it for hyperÁüÖFC let hyper_service = TowerToHyperService::new(service);Áúü¡da if let Err(err) = hyper_util::server::conn::auto::Builder::new(TokioExecutor::new())Áü†<9 .serve_connection(socket, hyper_service)ÁÔà .awaitÁŒÞüðEB eprintln!("failed to serve connection: {err:#}");ÁŒ¶ });Á ```ÁðúüôSP Keep in mind that while this example uses [hyper], tower-http supports any HTTPÁüÈMJ client/server implementation that uses the [http] and [http-body] crates.Áú¤š # Example clientÁ¯úü³>; tower-http middleware can also be applied to HTTP clients:Áòú”öõ‘¬‰üŸ*' decompression::DecompressionLayer,ÁüÊ*' set_header::SetRequestHeaderLayer,ÁÔõÞ’ü*' classify::StatusInRangeAsFailures,ÁüÂ52 use tower::{ServiceBuilder, Service, ServiceExt};Áüø@= use hyper_util::{rt::TokioExecutor, client::legacy::Client};Áì¹Í”¬×¯”üí96 use http::{Request, HeaderValue, header::USER_AGENT};Á§ú”«Ç—¬¾ async fn main() {ÁüÔDA let client = Client::builder(TokioExecutor::new()).build_http();Áü™.+ let mut client = ServiceBuilder::new()ÁüÈ@= // Add tracing and consider server errors and clientÁü‰" // errors as failures.Áü¬# .layer(TraceLayer::new(ÁüÐNK StatusInRangeAsFailures::new(400..=599).into_make_classifier()Á ))Áü®96 // Set a `User-Agent` header on all requests.Áüè52 .layer(SetRequestHeaderLayer::overriding(ÁÜž USER_AGENT,Áüº;8 HeaderValue::from_static("tower-http demo")Áå«ü…)& // Decompress response bodiesÁü¯-* .layer(DecompressionLayer::new())ÁüÝ74 // Wrap a `Client` in our middleware stack.Áü•;8 // This is possible because `Client` implementsÁüÑ  // `tower::Service`.Áìò .service(client);ÁúÌ” // Make a requestÁü®(% let request = Request::builder()Áü×&# .uri("http://example.com")Áüþ+( .body(Full::<Bytes>::default())Á´ª .unwrap();ÁÁúìÅ let response = clientÁ¤ã .ready()Á”ø .awaitÁ¬‹  .unwrap()ÁÔ¡  .call(request)Á”¼ ç²´Ï ù±¢ž¢ô úœø  # Feature FlagsÁŒ!úü!UR All middleware are disabled by default and can be enabled using [cargo features].Áæ!úüê!TQ For example, to enable the [`Trace`] middleware, add the "trace" feature flag inÁ´¿" your `Cargo.toml`:ÁÖ"ú\Ú" ```tomlÁüæ":7 tower-http = { version = "0.1", features = ["trace"] }Á<¡#ž¢©#úü­#.+ You can use `"full"` to enable everything:ÁÜ#ú\à#Ÿ¶üì#96 tower-http = { version = "0.1", features = ["full"] }Á<¦$ž¢®$ú”²$ # Getting HelpÁÅ$úüÉ$a^ If you're new to tower its [guides] might help. In the tower-http repo
„œ '¬ 8 pin_projectÁ  ¹  » Ö , É  Ê Ð + Ë  Ì Ï , Í 8¸ Î 
Ñ 8ß 8 , ê 8Ð   ï , ð  ñ ø , ò 8ñÌ $ ù 
ú  û  ý Ì +     8ÿ
 8¦  © ¯ 8 8ÝQ &  , ¸ 8½É 8  å , æ  ç î , è 8ñÌ $ ï 
ð  ñ , ó 8Ð   ø , ù  ú  , û 8ñÌ $  
ƒ     õ 8    8,˜ 8 Ÿ 8æ ¢  ¥ ´ 8ÝQ & « , ­ 8½É ( 8  ¾ ë 8  Õ Ý 8ÝQ,× 8$€  ,  , 8ñÌ,ˆ $ Ž 
 8â L ' 8BodyÁ$ 8
¢ , ¦ 8Ð  « , ¬  ­ ´ , ® 8ñÌ $ µ 
 ·  ¹  M8! 8DataÁ Ñ  Ó , Ô 8½É 8Ü 8â 'è 8ýÓ  î 'ï 8‚Õ % õ 8!
8Ë<,ˆ
Ž

,
8½É4
8
8â
'¥
8ýÓ
 «
'¬
8Ë<
% ³
+ Â
 Ã
Ê
8Ý
8 Ø
8
poll_frameÁ
 å
Ô 8
& û
8Àý
' 8ÿ
 ' 8PinÁ  Š  8Œ 8$  $ 8cxÁ§ & ©  « 8¬ 8À° '³ 8taskÁ '¹ 8k   :8à  Å $ Æ (Ö 8ÀÙ 'Ü 8îØ 'â 8·  è 8¬  ï 8Í  ö 8â ' 8FrameÁ,  8$ˆ 'Œ 8‚Õ  $ 8$• ' 8Ë<,    ¢  ¤ æ  8  º 8ÞV   à  Ä 8ÝQ  Ê 8¢×  Õ Ø 8·ØÖ + õ  ö ý 8Ý 8 
8
is_end_streamÁ

¡
 œ
8$
(£
8º
 «
õ
8â
'Æ
8ýÓ
'Ì
8ªÜ
 Û
ç
 Ü
8
 á
8ÝQ
+    Œ 8Ý4† 8 š 8 size_hintÁL  ¦ ¬  § 8 (® 8â  'º 8SizeHintÁ  Å  8â L× 'à 8ýÓ 'æ 8‰Þ  ñ ý  ò 8  ÷ 8ÝQ % œ Ô¹   Ô Ë  Ú Ÿ , Û  Ü ç + Ý  Þ æ , ß 8¸ à & á 8û 
è 8ê 8! , ó 8Ð  & ø 8¼  þ , ÿ    ,  8ñÌ, &  8¼,ˆ $ Ž      ,  8½É4• &  8´œ % ž *¡  ¤ É K8 
„® '¾ 8Î  Ë  Í Ý , Û  Ü â + Ý  Þ á , ß 8¸ à 
ã 8ñ 8 , ü 8Ð    ,   ƒ Š ,  8ñÌ,… $   Œ     Ó + ¡  ¢ ¦ 8ÿ
£ 8ÝQ,¸ & ½ , ¿ 8½É 8  ì , í  î õ , ï 8ñÌ $ ö  ÷  ø , ú 8Ð   ÿ ,    ˆ ,  8ñÌ $   Š       8  ž ¤ 8 8 ¦ 8æ ©  ¬ » 8ÝQ,­ & ² , ´ 8½É (½ 8  Å  8  Ü ˆ 8ÝQ 8  ¯ , °  ± ¸ , ² 8ñÌ $ ¹  º  » 8À½ 'À 8× 'Å 8p 8
Í , Ñ 8Ð   Ö , ×  Ø ß , Ù 8ñÌ $ à  á  â  ä £ 
8 ò 8×õ  ø Ÿ  ù 8 $ þ 8±  &   ƒ 8 8Àˆ ' 8× ' 8ˆL   :8œ  ž (¡ 8À¤ '§ 8ש '¬ 8Í  µ  
8± Ç  È 8 debug_tupleÁ  Ô æ 8Ô  Þ  ß å , à 8Ð   ç 8  í   î 8ë  ú  û  7...Á  ƒ 8finishÁ4„  Š  8  ² , ³  ´ » , µ 8ñÌ $ ¼  ½  ¾ 8ÀÀ 'à 8S 'Ë 8Ø< 8
Ô , Ø 8Ð   Ý , Þ  ß æ , à 8ñÌ $ ç  è  é 8$ ,  8½É4† & Œ 8ÀŽ ' 8S4“ ' 8Ø<4 $ ¡  « à !8! 8° Å  Ç , È 8½É 8Ð 8ÀÓ 'Ö 8S 'Þ 8Ø<  æ 'ç 8° % ï + ý  þ  8Ý4ÿ 8  8Š $–  š Ú 8$ & Ÿ 8À¡ '¤ 8ÿ
¦ '© 8ù׫  ®  ¯ 8° 8  ¸ $ ¹ 8·Ø» & ½  ¿ 8À 8ÀÄ 'Ç 8îØ 'Í 8k  Ö :8×  Ù (Ü 8Àß 'â 8îØ 'è 8·  î 8 'ó 8°  û  ý ¹  8$   8ÞV<”   œ   8ÝQ  £ 8Š   ¨ « 8·Ø© ¼°Eü*' Middleware for following redirections.Á+út/ðŒ>úüB`] The [`FollowRedirect`] middleware retries requests with the inner [`Service`] to follow HTTPÁŒ£ redirections.Áµúü¹\Y The middleware tries to clone the original [`Request`] when making a redirected request.Áü–]Z However, since [`Extensions`][http::Extensions] are `!Clone`, any extensions set by outerÁüôZW middleware will be discarded. Also, the request body cannot always be cloned. When theÁüÏ\Y original body is known to be empty by [`Body::size_hint`], the middleware uses `Default`Áü¬b_ implementation of the body type to create a new request body. If you know that the body can beÁü\Y cloned in some way, you can tell the middleware to clone it by configuring a [`policy`].Áìú # ExamplesÁÿú”ƒ ## Basic usageÁúž¢ü¢"Ñ“¬Å¯”ìÛÍ”üù52 use tower::{Service, ServiceBuilder, ServiceExt};Áü¯GD use tower_http::follow_redirect::{FollowRedirectLayer, RequestUri};Á÷ú¤û # #[tokio::main]Áü?< # async fn main() -> Result<(), std::convert::Infallible> {ÁüÐHE # let http_client = tower::service_fn(|req: Request<_>| async move {Áü™ 2/ # let dest = "https://www.rust-lang.org/";ÁüÌ 2/ # let mut res = http::Response::builder();Áüÿ  # if req.uri() != dest {Á¼ 
 # res = resÁü¸
>; # .status(http::StatusCode::MOVED_PERMANENTLY)Áü÷
85 # .header(http::header::LOCATION, dest);Á  # }Áü¼ XU # Ok::<_, std::convert::Infallible>(res.body(Full::<Bytes>::default()).unwrap())ÁL•  # });ÁüŸ *' let mut client = ServiceBuilder::new()ÁüÊ *' .layer(FollowRedirectLayer::new())Áôõ  .service(http_client);Á
úü˜
$! let request = Request::builder()Áü½
&# .uri("https://rust-lang.org/")Áüä
'$ .body(Full::<Bytes>::default())Á”Œ .unwrap();ÁŸúü£>; let response = client.ready().await?.call(request).await?;Áüâ! // Get the final request URI.Áü„c` assert_eq!(response.extensions().get::<RequestUri>().unwrap().0, "https://www.rust-lang.org/");Á # Ok(())Á«—ž¢úü‰ ## Customizing the `Policy`Á©úü­XU You can use a [`Policy`] value to customize how the middleware handles redirections.Áúž¢ü’"Ñ“ìµÍ”¬Ó¯”üé5ûûüŸ&# use tower_http::follow_redirect::{ÁüÆ" policy::{self, PolicyExt},Áäé FollowRedirectLayer,Á4†ú¤‘ #[derive(Debug)]Á”¦ enum MyError {Á̹ TooManyRedirects,ÁüÓ Other(tower::BoxError),Á¢ùú¤ý–ýü’.+ # async fn main() -> Result<(), MyError> {Á¼Á # let http_client =ÁüÙmj # tower::service_fn(|_: Request<Full<Bytes>>| async { Ok(Response::new(Full::<Bytes>::default())) });ÁüÇZW let policy = policy::Limited::new(10) // Set the maximum number of redirections to 10.Áü¢63 // Return an error when the limit was reached.ÁüÙPM .or::<_, (), _>(policy::redirect_fn(|_| Err(MyError::TooManyRedirects)))Áüª_\ // Do not follow cross-origin redirections, and return the redirection responses as-is.ÁüŠ41 .and::<_, (), _>(policy::SameOrigin::new());Á¿úüÃ*£‚üî85 .layer(FollowRedirectLayer::with_policy(policy))Áü§  .map_err(MyError::Other)ÁôÈŠƒçú // ...ÁüöDA # let _ = client.ready().await?.call(Request::default()).await?;ÁÓ†«—ž¢»follow-redirectÁÜ’EüŒE#|¸E±µÊØëü½¾ÂõO4ý¿âÁ7<…Çãù44ŽŸä²7D–ÆåEitherÁ4»²HæCONTENT_ENCODINGÁ„Û ÇèCONTENT_LENGTHÁtõ Éé CONTENT_TYPEÁd ÎêLOCATIONÁD£ ßëTRANSFER_ENCODINGÁŒ¹ öì HeaderMapÁLÌæ
í HeaderValueÁ\׺îMethodÁ4ä¥ïÕ‘ôð»<DõˆñˆtTÿò¡‚¸óVersionÁ<”óôýÓ)õÎöíðøØ<4…‚Øùíëúùן„¾ûɨ™3üreadyÁ,¸¥‚þk<¿Ìÿ·œØOneshotÁ<ã §LayerÁ,ýœ;<—%ƒUrlÁ©(…üa^ Tools for customizing the behavior of a [`FollowRedirect`][super::FollowRedirect] middleware.Á 0KXm~Ÿ³ÆÇà¿öJè펭.l -‡L\ÉLŒ¶¨M<ÖçMçæ2\ý {÷NTН¸OT¨·˜SchemeÁ4Țؕ¥Õ‘ôœˆtTá¡‚í¸ž<cgíõO4 ¿  Á7<Ç  ù44Ÿ 
Õ‘<0ô ,IK;=-/l*!¤ Íìê… ¥Íìð… ¨²…ü»jÉê…ð…²…Ð-ÍìÐ-ÍÍì ÑŸê…ן꟟ð…ןêŸl—
ê…ð…ן꟬ Ô­ ÚkmegüÊ_Ð-Íìâ†ÏÍìè† ÓÍìÖ†
 `£cbufÁ `àB¤GS
ìÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ŸÈŸÈ ÈË< O˜éBL$ 
$
&¢‡
± 
ü»O
()**()í¢‡ íð…˜"Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙð…L€
Èž Ã
Íì͇ Æ
í"¢‡¤­œö
ˆª À
õ†+,¢¤,+Y[UWü‘<
D”
îïð îõ† ïÇÇÁ7ÉÚ7Êè7Ëö7̆8Í8ˆüÊðŒÌ”ðÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¼Ž͇' 
'
+¢‡ð…͇
 ¨
üö+

ñò ñõ† òð…·­' 
'
,¢‡ð…͇$…
¦+$
üÒT
üÄP
M Create a new redirection [`Policy`] from a closure `F: Fn(&B) -> Option<B>`.Á
úü™_
\ [`clone_body`][Policy::clone_body] method of the returned `Policy` delegates to the wrappedÁüùX
U closure and [`redirect`][Policy::redirect] method always returns [`Action::Follow`].ÁlÙ
¢‡õ†././ˆª ç
Èž ê
ó"¢‡ óð…œ’
󢇵˜"·­
-¢‡ð…± í
acfh´”ƒ;‰¼9L  à02õO4¿03Á7<Ç04ù44(Ÿ05headerÁ$J08Ê´TPë09Õ‘<aô0:,wyik[]$5”5M4A@B13ô÷0 ¯¶´ïÚ‡=>?@ABC¤†üŒ_\ Create a new [`FilterCredentials`] that removes blocklisted request headers in cross-originÁŒðàõÚ‡<<
=ü¼9üóDA Configure `self` to mark cross-origin redirections as "blocked".Á”ÃÚ‡Ú‡<<
>ýüû"üº<9 Configure `self` to mark every redirection as "blocked".ÁL Ú‡Ú‡<<
?$ ü–
#ü× :7 Configure `self` to mark no redirections as "blocked".ÁT
Ú‡Ú‡<<
@
üó 9üŽ MJ Configure `self` to remove blocklisted headers in "blocked" redirections.Áà úüè 1. The blocklist includes the following headers:Áž ú¬¦  - `Authorization`Á  - `Cookie`ÁÜÓ  - `Proxy-Authorization`Á”ú Ú‡Ú‡<<
A$
ý4—
ü»#üñ
EB Configure `self` to remove all headers in "blocked" redirections.ÁTÂÚ‡Ú‡<<
Büâ$ü™DA Configure `self` to remove no headers in "blocked" redirections.Á\éÚ‡Ú‡<<
CüÚ"Ú‡E´E¤ƒ<†Ú‡DD
Eü·-GHHGÍìÔˆ ¼·¡ ¿Ú‡IJ¢£JI"$')üëBôõö ôÚ‡ õÇÇÁ7ÉÚ7Êè7Ëö7̆8Í8ˆüÊðŒÌ”ö­F ÷F
IÔˆè†É£<‚üÜ2÷ø ÷Ú‡ øôôÕ‘ö呦÷¦+¦Œ4ñŠ|åÔˆF êF
JԈ膋¥\—<õO4 ¿KMÁ7<ÇKNù44ŸKO,68(*åˆQô›üÖ@= Create a new [`Limited`] with a limit of `max` redirections.Á¢åˆPP
QmaxÁ¦ÄèåˆS´S¤Òü‡FC Returns the default [`Limited`] with a limit of `20` redirections.Á<ÕåˆRR
Sü#UVVU¹Â ·¡ ˜åˆW¢W üº<ùúû ùåˆ úÇÇÁ7ÉÚ7Êè7Ëö7̆8Í8ˆüÊðŒÌ”û­T ÆT
WÔˆè† Ñ¨õO4 ¿XZÁ7<ÇX[ù44ŸX\Õ‘<0ôX],IK;=-/l*_``_·ž ¢Èž ¥؉aü·jÅê…ð…؉^Ð-bcbc^ÏŸÉ⟠ÍõŸ l“
aê…ð…ן꟬ Э Ö@BEGüÅ^Ð-efghgehf¦¡Ê·¡ ÎÈ¡ ÑÙ¡ Ôê¡lÿ‚¢l•ÀŠijk¢£¤ikjKMPRUWZ\üªBD­üýþ üÀŠ ýÇÇÁ7ÉÚ7Êè7Ëö7̆8Í8ˆüÊðŒÌ”þ­d d
iâ†è†Ö†܆É£ü„3T‡ÿ ÿÀŠ € ™¥d d
jâ†è†Ö†܆$—‹¥<ü-T   ÀŠ ‚ â†ߦd d
kâ†è†Ö†܆¦+$¢åkú¦l’§l¯§llklâ†è†Ö†܆⨠ ÀŠù¨õO4 ¿moÁ7<Çmpù44Ÿmq×/¤,mr,HJ:<,.D*!ü×$ttˆª ÜuÀcuü‚8ƒ  ƒ   c cˆ¢cµ
 `£c–ª `àB¤GS
½«s s
u¢‡± ü¶cwxyxywŠŒ ÇÇÁ7ÉÚ7Êè7Ëö7̆8Í8ˆüÊðŒÌ”˜"­Œ‡·¡ ¾Í슌 Á“"ŠŒØüð(¹Â »Ý‹z¢zVXRTü Bˆ Š  ˆ Ý‹ ÇÇÁ7ÉÚ7Êè7Ëö7̆8Í8ˆüÊðŒÌ”Š ­v ¬v
zԈ膊ŒÉ£üßfüˆ63 Create a new redirection [`Policy`] from a closureÁü¿2/ `F: FnMut(&Attempt<'_>) -> Result<Action, E>`.ÁòúüöOL [`redirect`][Policy::redirect] method of the returned `Policy` delegates toÁÄÆ the wrapped closure.Á\梇|}|}ˆª ò·¡ õŒ “"¢‡ ÇÇÁ7ÉÚ7Êè7Ëö7̆8Í8ˆüÊðŒÌ”Œ üœ(Œ ¢‡ÏÞ˜"­Œ³
{¢‡è†± øÊÌÏÑ·¼9L  à~õO4¿~Á7<Ç~ù44(Ÿ~ƒ×:¤,~,_aPRAC24D5&|ÍŸŒ¤ˆüã  Create a new [`SameOrigin`].ÁŸŒ
ôÀŸŒˆÀcˆüå8è Ž    ŸŒ Ž  c cˆ¢cµ
 `£c–ª `àB¤GS
 ½« ì
ˆ± óü×&ŠŠ¹Â Ü·¡ ߟŒŒ¢Œ "ü„BD‡   ŸŒ ÇÇÁ7ÉÚ7Êè7Ëö7̆8Í8ˆüÊðŒÌ”­ 
ŒÔˆè†$•É£<$×%ü×'ƒ%†%x%{%ü¢%q%„Íf%4ã[%ü×£R%U%G%J%¼›?%$¼2% %#%%%%%ô$÷$´§
üô;8 Trait for the policy on handling redirection responses.Á°ú
# ExampleÁÂúüÆ# Detecting a cyclic redirection:Áêúž¢üö%" use http::{Method, Request, Uri};Áüœ" use std::collections::HashSet;Áü¿GD use tower_http::follow_redirect::policy::{Action, Attempt, Policy};Áú¤‹ #[derive(Clone)]Áä  pub struct DetectCycle {Áü½%" uris: HashSet<(Method, Uri)>,Á¢éúüí-* impl<B, E> Policy<B, E> for DetectCycle {Áü›LI fn redirect(&mut self, attempt: &Attempt<'_>) -> Result<Action, E> {Áüè\Y if self.uris.contains(&(attempt.method().clone(), attempt.location().clone())) {ÁüÅ  Ok(Action::Stop)Á¤æ } else {Áüûb_ self.uris.insert((attempt.previous_method().clone(), attempt.previous().clone()));ÁüÞ " Ok(Action::Follow)Ál

L
þ¡,™
¢
ž¢
Ÿ ¡Ÿ ¡Îìü§
øÈž ¸
Œ® »
ŸØï*Øï£¤¢£¤¢£¤DFIKüž CüÄ
XU Invoked when the service received a response with a redirection status code (`3xx`).Á¡ úü© WT This method returns an [`Action`] which indicates whether the service should followÁ¤…  the redirection.ÁD¡  “ àï ÇÇÁ7ÉÚ7Êè7Ëö7̆8Í8ˆüÊðŒÌ”£°Ÿ ª Ÿ
¢àïð…͇ É£ ü™3üç \Y Invoked right before the service makes a request, regardless of whether it is redirectedÁ
 or not.ÁØ
úüà
MJ This can for example be used to remove sensitive headers from the requestÁü²)& or prepare the request in other ways.Áàúüè,) The default implementation does nothing.ÁTœ – àï ôôÕ‘ö呦÷¦+¦Œ4ñŠ|åð…Ÿ §Ÿ
£àïð…͇_requestÁD²üÜ,üÕNK Try to clone a request body before the service makes a redirected request.Á¨úü°85 If the request body cannot be cloned, return `None`.ÁíúüõWT This is not invoked when [`B::size_hint`][http_body::Body::size_hint] returns zero,ÁüÑKH in which case `B::default()` will be used to create a new request body.Á¡úü©.+ The default implementation returns `None`.ÁTߘ  ˜ àï ™ ð…·­Ÿ êŸ
¤àïð…͇_bodyÁ,ñü¡I8𠦧¡¨¨§š ¦Èž ¦Œ® ©Îì ¬Ÿð…͇©ª«¢£¤«©ªZ\_a[]üñB œ   › ’ œ ÇÇÁ7ÉÚ7Êè7Ëö7̆8Í8ˆüÊðŒÌ” £°¥ ý¥
©8ð…͇$‚É£üä2ž Ÿ  ž ’ Ÿ ¯÷¥ ò¥
ª8ð…͇‹¥üÉ+  ¡    ’ ¡ ð…·­¥ ×¥
«8ð…͇¦+$Þü¢I­®¡¯®­¯¹Â §·¡ ªÎìî ­ŸîԈ膭°±²¢£¤±²°Z\_a[]üòB¢ £ ¤  ¢ ­ £ ÇÇÁ7ÉÚ7Êè7Ëö7̆8Í8ˆüÊðŒÌ”¤ ­¬ þ¬
°Ôˆè†îÉ£<‰üå2¥ ¦  ¥ ­ ¦ œÅ¬ ó¬
±Ôˆè†î‹¥üÊ+§ ¨  § ­ ¨ ÔˆÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙÔˆ¬ ج
²Ôˆè†î¦+$ßœêü£FC An extension trait for `Policy` that provides additional adapters.Á³³Øïüê¡
³ØïØï ´¸´¸¸´ü´ vü„[X Create a new `Policy` that returns [`Action::Follow`] only if `self` and `other` returnÁ¬ä `Action::Follow`.Áþúü†^[ [`clone_body`][Policy::clone_body] method of the returned `Policy` tries to clone the bodyÁ¼é with both policies.ÁúlíæŸúž¢¬³¯”ìÍÍ”üïWT use tower_http::follow_redirect::policy::{self, clone_body_fn, Limited, PolicyExt};ÁËúŒÓ enum MyBody {Á¬é Bytes(Bytes),ÁÔƒ Full(Full<Bytes>),Á¢¬úü´JG let policy = Limited::default().and::<_, _, ()>(clone_body_fn(|body| {Áüƒ*' if let MyBody::Bytes(buf) = body {Áü²,) Some(MyBody::Bytes(buf.clone()))Á„ã
} else {Á„ø
NoneÁL þ¡D  }));Áž¢· àïš‘ííöJð¬ ñ­ 
~ƒü•&tü°!]Z Create a new `Policy` that returns [`Action::Follow`] if either `self` or `other` returnsÁ¬’"œ‰¬"úü´"^lj¼—#®Š³#úl»#íæÍ#ú<Õ#ž¢üá#PM use tower_http::follow_redirect::policy::{self, Action, Limited, PolicyExt};Á¶$ú¤¾$é”×$«ŠÌî$ÆŠtŒ% // ...Á,Ÿ%¢©%úü±%SP let policy = Limited::default().or::<_, (), _>(Err(MyError::TooManyRedirects));Á<‰&ž¢˜&àïš‘çMž¬XŸ­X ÊËQàïš‘³¡¹º»¹º»³®‘ &¿‘ ž&⟠¡&Ø‘,ê&é‘dÛ&dü&
¸àïš‘«•êŸ$¤&¹
,ª&PRUWZ\ü',¥½½Î쯎 ’'¯Ž¾Â´¸Â¾ üÀ'vÃ'¯Žš‘ííöJð¬ ñ­ vÞ¼z]mx¯Žš‘¼¡¿ÀÁÁ¿À¼®‘ Ç'¿‘ Ê'⟠Í'Í쯎,—(Ÿ¯Ž«•êŸdˆ(d©(
¾¯Žš‘«•êŸ$Ð'¹
,Ö'iknpsuüæ(té(¯Žš‘çMž¬XŸ­X ÊËQ¯Žš‘¼¡ÃÄÅÅÃﮑ ì(¿‘ ï(⟠ò(,»)ž›d¬)dÍ)
Â¯Žš‘«•êŸ$õ(¹
,û(PRUWZ\Œÿ+ü‡*HE A redirection [`Policy`] with a reasonable set of standard behavior.ÁÐ*úüÔ*JG This policy limits the number of successive redirections ([`Limited`])ÁüŸ+_\ and removes credentials from requests in cross-origin redirections ([`FilterCredentials`]).ÁDˆ,ííöJð¬ ñ­ vÞ¼z]mxåˆÚ‡´ñ,üµ,;8 A type that holds information on a redirection attempt.Á<ü,Ð7ÈÈÇÇÁ7ÉÚ7Êè7Ëö7̆8Í8ˆüÊðŒÌ”Ð7ˆüÊðŒÌ”ÉÊËÌÍ„-ìŽ-4™-ÇÇΈì±-4¼-ÇÇ Ð7¥¥¦Ø•§ˆÔ É©jm…½¸éäÔ-Dß-ÇÇ Ð7—ƒüö-&|.Çǰ£ä¢.D­.ÇǤ¤Ã.Ð7ÏÏú¡ÐÑÒÓÔÈ.üˆ/"üÞ.%" Returns the redirection response.Á4/©  © ú¡ΈÎ –/Î
ÐÐ7$—/ü‡0"üÌ/63 Returns the destination method of the redirection.Á4Ž0ª  ª ú¡°£Î •0Î
ÑÐ7$0üƒ1!üË030 Returns the destination URI of the redirection.ÁDŠ1«  « ú¡¤Î “1Î
ÒÐ7$”1ü‘2+üÈ1DA Returns the method for the previous request, before redirection.Á|˜2¬  ¬ ú¡°£Î ¨2Î
ÓÐ7$©2ü˜3!üç2,) Returns the URI of the original request.ÁDŸ3­  ­ ú¡¤Î ¨3Î
ÔÐ7$©3\´6¼ŽÖ×ü‚7üÆ674 Returns `true` if the `Action` is a `Follow` value.ÁL‰7®  ® ¼ŽÕ “7Õ
Ö$”7ìÎ8ü”852 Returns `true` if the `Action` is a `Stop` value.Á<Õ8¯  ¯ ¼ŽÕ Ý8Õ
×$Þ8üÚ9"ÙÚÚٹ ß9·¡ â9¼ŽÛ¢Û "üƒ:<D†:° ± ²  ° ¼Ž ± ÇÇÁ7ÉÚ7Êè7Ëö7̆8Í8ˆüÊðŒÌ”² ­Ø :Ø
ÛÔˆè†$”: š:üÝ:AÝÞÝ޹ â:·¡ å:Øè†,˜;­ß¢ß+-02ü¥;<D¨;³ ´ µ  ³ ­ ´ ÇÇÁ7ÉÚ7Êè7Ëö7̆8Í8ˆüÊðŒÌ”µ ­Ü ±;Ü
ßÔˆè†$¶; ¼;üÎ<*LÑ<·  ¶ —ƒ · —ƒ à<
àÛ<rhsÁæ<©O¬OOžOOOOOä¥oO$ÇÄÓVO´í:O¤… O„›
O̱ëNÐNÓN·NºN£N¦N”N—N†N‰NxN{NiNlNTNWN|¤INì¹<NÜ„ç3Ntý&NNNDš N÷MúMüÜYéMìMÚMÝMËMÎM¤Ö¹M”ð§M´ˆšMD¤‹MÄ¥!ÊÊÆPÌ-ÕN³°t—çÕ ¤™"üÄ!PM Create a new [`FollowRedirectLayer`] with a [`Standard`] redirection policy.Á "›µ
ôÑ"¡ˆˆÍì¿ Ö" 
üÊ#%üö"OL Create a new [`FollowRedirectLayer`] with the given redirection [`Policy`].Á\Ñ#¿
¿-4Ý#ü¢$P¤¡ŒŒÍì ‘ §$®‘ ª$Ø ‘,Þ$Øš‘,ì$펎BDGIdù$<þ$ŠŠ­‘ü£%*,¦%¸  ¸ í ‘í ‘Š ¬%Š
Ž ‘š‘$­%ÝQ,³%Ì“(¤ñ¸ ˜(ØØ·QÛÝQÜ-â$™
eÂÍ ‘Õ JLäƒ)ü³(KH Create a new [`FollowRedirect`] with a [`Standard`] redirection policy.ÁŠ) ‘»
 ‘ÝQ,Ž)üé*%üã)SP Returns a new [`Layer`] that wraps services with a `FollowRedirect` middleware.Á»*úüÃ*! [`Layer`]: tower_layer::LayerÁ,ð*›µ
 ‘ü½+3¤¡ñ¸ Â+®‘ Å+š¹,ê+­‘èéê'),.üÆ,/ü÷+JG Create a new [`FollowRedirect`] with the given redirection [`Policy`].Á\Í, ‘š‘­‘
 ‘š‘ÝQ,Ù,-4ã,üà.=ü¬-RO Returns a new [`Layer`] that wraps services with a `FollowRedirect` middlewareÁüƒ.*' with the given redirection [`Policy`].Á².úüº.!õ¼Œç.š‘í
 ‘š‘-4ù.ü‚0ä<œ<š¤¡œœš Á’Ë’% ˆˆ»<Šå‘¦+“q8‚ õ™œ<äù0ÍìøÃ<0ÍìÁ’ ™0Íì œ0%Á’Ë’üß07Íì<‡0ØÁ’,™1)$­1³<´1ŸÁ’Ë’%
ÌÄ1Ø,à1‰’žŸ ¡% %
% % %
 ¡ãåßáÛÝlí1Dò1˜˜½ÃT”2,™2˜˜˜Å\¯24´2˜˜ëëíRï›Sð©Sñ-òè7óÈSôÄõÛSö¦+ôr©ãt_"Á’üá2OTä2¹ º »  ¹ ‰’ º ÌÌkÎwakerÁ¸Ï local_wakerÁ¸ÐextÁ¸Ñ_markerÁ¸Ò_marker2Á¸f'EwÚ]¾å» œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
‰’Ë’%
˜ ï2˜
 øÃÁ’$ô2·Øú2üà3=$ã3¼  ¼ ‰’Ë’‰’Ë’% ˜ è3˜
¡øÃÁ’$í3reqÁ÷3üŸ<Ò¤£<¤œ<¥¡¦£¥¦¤
 ‘ôôÕ‘ö呦÷¦+¦Œ4ñŠ|åÑ–% ˆˆ»<Šå‘¦+“q8‚ õ™œ<äŒ=ÍìÑ–<§<ÍìôÍ<°<¤Ä ¹<% ‘÷Ìüò<7ñ¸ ¤<й,¬=)Ñ–$À=³Ñ–<Ç=ŸÑ– ‘÷Ì%
Ì×=Ó•§¨ƒØ„بeg§©£¥¨ª\ø=4ý=¢¢Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¹ÍúÎü°>I$³>¾ ¿ À „¾„¾ù׆¾ ˜X$]È=„kt• ¾ Ó• ¿ ÌÌkÎÅÇ¸ÏØÇ¸ÐñǸтȸҗȸf'EwÚ]¾åÀ œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÓ•ƒØ¢ Â>¢
¨ ‘Ñ–ôÍ$¸>·ØÎ>Ìû@¨ú¦©’§©¯§©©¨© ‘Ñ–ôͽ  ½ æ
æ
œ•è
maskÁé
indicesÁê
entriesÁë
extra_valuesÁì
dangerÁPa $piwºº¹•»ÝQ¾¼ is_sensitiveÁ¾ÚÞ ªM,ÄL¨ú¦ª’§ª¯§ªª¨ª ‘Ñ–ôÍ ¶ÕÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ—ƒ ñTŠ›S©SŒ-è7ŽÈSÄÛS¦+NJZ°"W Ñ–üýX0¬¬¹Â ‚Y)Ôˆ$žY³Ôˆ<¥Y˜—­®-/ü´Y$·YÁ  Á ˜—« ¼Y«
­Ôˆ$ÁYüí[[tð[ à Ä   ˜— à Ԉ Ä š‘«¡¯°¯° …\«®‘ ÿ[Œ® ‚\Ÿš‘Ôˆ͇d»\
®Ôˆš‘͇$Š\¦+$\-4š\LNQSüÞ^kTá^Å Æ  Å ¿ Æ ð…·­¡²³´³´² ý^þ¶ ì^Èž ï^Œ® ò^Ÿ¿ð…͇d¥_)ð…$º_³ð…<Á_
±¿ð…͇-4õ^¦+$_lnqsvxü“a9\aÇ È  Ç  È —ƒöÖ ¬a
µrelativeÁD¢abaseÁ$²a„ŒIüA
> Tools for classifying responses as either success or failure.ÁD”IÀì°ÀÊÒ­ÃËœ•LN
æ
¸Õ‘<Y
ô¹»<Db
ˆºˆtTl
»
InfallibleÁTŒ
ˆê½×˜
¤,¾ PhantomDataÁ\¥
¿‚࿇ZDÉ
ΨÔo¼Ó
ð©‰o¤ì
ꪕp„‚
ö«¸r|²
¬¡s¼â
ž®çsÌû
¤¯$G
:=+. }
œƒ
þêìœ
Òü´&
¼Ã
éÎðêö÷øùÿ¥u” ÀÂí@\ ÊÀÃàG„-ÀÀÄÉt„?­ÀůD`ÀÆœ•Luæ
ÀÈ»<D€ˆÀÉפ,ÀË
NonZeroI32ÁTŸÌ—ÀÌ,ÄÆ´¤¦–”V‡$nvxfhY[|šBl  ô—Îü´ 3 ô—ÍÍ
Î ÜÛü×;8 Converts an `i32` gRPC status code into a [`GrpcCode`].Áúü—C@ Unrecognized codes (outside 0-16) map to [`GrpcCode::Unknown`].Áô—ÐëÐÜý$€ô—ÏÏ
л,…üž"ô—ÒëÒüÇ"Ôšô—ÑÑ
Ò»¤Æ&Ôüá&*dä&ÀÑáÓÓ
ÔcodeÁ$ñ&üƒ2%£¡Ö´Ö¤¯2<²2£¡ÕÕ
ÖÌã2£¡ØÙÚ¤²3üƒ3*' Create a new [`GrpcErrorsAsFailures`].Á¹3£¡××
Øüÿ85ü430 Change which gRPC codes are considered success.ÁÕ4úüÝ41. Defaults to only considering `Ok` as success.Á“5úü›5-* `Ok` will always be considered a success.ÁÍ5úlÕ5íæç5úüï5ZW Servers might not want to consider `Invalid Argument` or `Not Found` as failures sinceÁüÎ6# thats likely the clients fault:Áö6ú\þ6 ```rustÁüŽ7?< use tower_http::classify::{GrpcErrorsAsFailures, GrpcCode};ÁÒ7úüÚ70- let classifier = GrpcErrorsAsFailures::new()Áü80- .with_success(GrpcCode::InvalidArgument)ÁüÄ8*' .with_success(GrpcCode::NotFound);Á<ó8ž¢d†9£¡ô—£¡××
Ù$—9ÿç$9ü¾;2ü‚:]Z Returns a [`MakeClassifier`](super::MakeClassifier) that produces `GrpcErrorsAsFailures`.Áä:úüì:MJ This is a convenience function that simply calls `SharedClassifier::new`.Á|Å;­­Ét¯ét‘&OõžàÖ£¡××
Úü§<.£¡ÜÝÞàÁÂÃÅÞàŒÜ<dá<ÛÛÄ¢„†=\‹=ÛÛù¡ü·=„Œº=É £¡ É ˆˆ»<Šå‘¦+“q8‚ õ™Ôˆ¹ºÈ»ˆ¼½äu¾ˆÄ‚à­»‚¹£¡Á£¡ÂÛßß ë=۹ Ì=
ÞÔˆ$Ø=resÁæ=!ü¶Cht¹CÊ £¡ Ê ­õÛáá ØCÛÍìÇö ÈCÄcÇöd‡DÇö<D
àÇö$ËCerrorÁ,ÑC<>üûE,ù¡ãäåËÌÍä匮Fd³FââÄ¢üÙFUdÜFË ù¡Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ Ë ¸ÔÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ù¡Ëâ €Gâ
ä$éFtrailersÁDïFüŸKht¢KÌ ù¡ Ì ÇöÞùâææ ÁKâõö ±K†÷dðK–÷<ÿK
åÇö$´K²ö,ºK-/ü‘O&Ä¢èÅcèü¾O4ÁOÍ Î Ï  Í Ä¢ Î  c cˆ¢cµ
 `£c–ª `àB¤GS
Ï ½«ç ÅOç
è$ÆO± ÌOü›Qx´©QÐ  Ð ¸Ôž£ ÎQ
éÛS<ÅQ¥olÞQ¤šR<§R ¯R ûS ¹R ÒR , ºR8$»R& ¿R8$ÀR$ ÄR, ÆR8¹
,ÇR& ÌR8¼,ÍR*ÔR ×R ôS
8åR8èR8Û$ìR ðR öR8»,ñR øR, úR8$ûR €S ¤S8»,S8$¦S «S êS84½S8èp„ÄS'ÔS, ÖS8¹
,×S% ÜS% õS4˜Véú¦ë’§ë¯§ëëéë §Â¬Ü
Έ
¥u” ìîí@\ ÊìïàG„-Àìðœ•LKæ
ìò»<DVˆìó×j¤,ìô,y{ikY[$DKM;=De.ü… ö÷ö÷Íì÷¤ ŠÍìý¤ ½¤øü¬,º÷¤ý¤½¤õõ
ø÷¤ý¤¬>D¾± ËüˆHúûûúæ‚ ÷‚ ¿c÷¤½¤üÀcü+-02ü×8ÚÑ Ò Ó  Ñ ½¤ Ò  c cˆ¢cµ
 `£c–ª `àB¤GS
Ó ½«ù Þù
ü÷¤ý¤± åüÍŠþÿ¿Cþÿý¤÷¤Á˜"¿CDÎ÷‚ ÕÍ쌇À÷¤„š–"ý¤ü†ü³#æ‚ Ò½¤ƒÁÂÃŃ,.wysuŒÞýýŒ‡„€\…ýý¸rÝQì±ìÄýüňÑ÷¤Âý¤ü¼Œ¿Ô ½¤ Ô ˆˆ»<Šå‘¦+“q8‚ õ™܆¹ºÈ»ˆ¼½äu¾ˆÄ‚à­»‚¹½¤Á½¤Âý ðýÙ¡ Ñ
ƒ÷¤ý¤Œ‡܆€õë)+üÖ m Õ ½¤ Õ êŸߊý ø ý⟠è ÄcꟌ§
êŸ

÷¤ý¤Œ‡êŸ ²ö DFü†ˆ¿CŠŠˆý¤÷¤Ë˜"Œ‡÷‚ Žž‡D‘Ê÷¤–"ý¤Ìüâ#æ‚ ½¤ŒËÌÍŒ%'gilnŒd’Œ‡ü°UÖ ½¤Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ Ö ¸ÔÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
½¤Ë ×
Œ÷¤ý¤Œ‡‹ùüÍm× ½¤ × êŸÏŽŽ ï⟠ߺŒŒžÊŒ
÷¤ý¤Œ‡êŸ²ö9;äó
Ä÷
ž¤¥u” àG„ À€I„2 ÒÉt„D ­ˆtTa ×w ¤,¾t ½£˜, Ž~np^`„[ Qq BDœ| 5äÆ
¶¥šœü¯
. üé
, ) Creates a new `StatusInRangeAsFailures`.Áš ú # PanicsÁ³ úü» T Q Panics if the start or end of `range` aren't valid status codes as determined byÁì”  [`StatusCode::from_u16`].Á úü¾ l i [`StatusCode::from_u16`]: https://docs.rs/http/latest/http/status/struct.StatusCode.html#method.from_u16Á
½£½£¾¿£¹À£þÁ£ exhaustedÁ1¥œMu7·P¶¥
šÀs,º
üÙ1 ü“Z W Creates a new `StatusInRangeAsFailures` that classifies client and server responses asÁ
failures.Á úüŒH E This is a convenience for `StatusInRangeAsFailures::new(400..=599)`.Áüà ¶¥
ü¹; üµE B Convert this `StatusInRangeAsFailures` into a [`MakeClassifier`].Áÿ úü‡- * [`MakeClassifier`]: super::MakeClassifierÁ¤À ¶¥­­Ét¯ét‘&OõžàÖ¶¥
œ ü¤1 ¶¥žŸ ¢ÁÂÃÅ¢ ŒÜ ¦ \” ÒÒ€IÔ IÕ²I—Ñò6A{†”¶¥ÁüÍŠ ŒÐ Ø ¶¥ Ø ¦ô¹ºÈ»ˆ¼½äu¾ˆÄ‚à­»‚¹Ç¶¥Â¡¡  ¹Â â
 Ôˆ €õü üæm té Ù ¶¥ Ù ÇöÇ££ ˆ õö ø †÷Œ· –÷
¢Çö ²ö, -/üä/ ¦¥Åc¥üš8  Ú Û Ü  Ú ¦ Û  c cˆ¢cµ
 `£c–ª `àB¤GS
Ü ½«¤ ¡ ¤
¥ ± ¨
üš#
j m ^ a R U F I üŸ"
? üšÅ
6 9 * - Ää
ü›<
9 Trait for producing response classifiers from a request.ÁØ
úüÜ^
[ This is useful when a classifier depends on data from the request. For example, this couldÁü»#
include the URI or HTTP method.Áß
úüã]
Z This trait is generic over the [`Error` type] of the `Service`s used with the classifier.ÁüÁ?
< This is necessary for [`ClassifyResponse::classify_error`].Á
úü…^
[ [`Error` type]: https://docs.rs/tower/latest/tower/trait.Service.html#associatedtype.ErrorÁ
°°ØïüäÙ
°ØïØï ±²³´±²³´Íìàï±ü­}
ÀΧü¾k
ΧÁàï²üØ!
ΧÂàï³üƒ 
ƧPß§Eð§0‹¨Íìû§”ž
¿¨Íì–¨üú A
Ê–¨üŒ .
–¨Ëû§ü˜ !
ר.é¨#ú¨´ü­|
üƒ%
" The response classifier produced.ÁT²
°°Œž
ü° (
% The type of failure classifications.ÁÝ
úüå F
C This might include additional information about the error, such asÁü°
H
E whether it was a client or server error, or whether or not it shouldÁäý
 be considered retryable.Ád£
°°üú @
ü¶ ?
< The type used to classify the response end of stream (EOS).Á\ÿ
°°üø C
üÁ 2
/ Returns a response classifier for this requestÁ|û
Ý Þ  Ý àï Þ ¯÷Χ°µµ Ž
°Èž
´àïð…$
™Ë
!#Üž
··æ‚ £
Û¦¸ 
üƒP
üÀ>
; Create a new `SharedClassifier` from the given classifier.ÁŠ
÷¤Û¦¯‡„º
Ø÷¤
¸÷¤étTŽ
üÿU
ººæ‚ 
¯‡„»
„°
Û¦»¼½¾²³±´¾8:ŒÛ

¹¹þ†„„
\‰
¹¹•‰

¹¹÷¤üÅC

ß à  ß Û¦ à ¯÷Û¦±¹¿¿ Û
¹Èž Ø
¾÷¤ð…
_reqÁ$â
$&Ô½%
ü´`
] Trait for classifying responses as either success or failure. Designed to support both unaryÁü• S
P requests (single request for a single response) as well as streaming responses.Áé
úüí N
K Response classifiers are used in cases where middleware needs to determineÁü¼!N
K whether a response completed successfully or failed. For example, they mayÁü‹"K
H be used by logging or metrics middleware to record failures differentlyÁœ×"
 from successes.Áë"
úüï"I
F Furthermore, when a response fails, a response classifier may provideÁü¹#O
L additional information about the failure. This can, for example, be used toÁü‰$O
L build [retry policies] by indicating whether or not a particular failure isÁtÙ$
retryable.Áè$
úüì$P
M [retry policies]: https://docs.rs/tower/latest/tower/retry/trait.Policy.htmlÁ„Ç%
ÀÀØïü½%½
ÀØïØï ÁÂÃÅÇÁÂÃÅÇÍìàïÁ”ø'
àºÍìàïÂüÔ(A
ʇ»üæ(.
‡»Ëèºüò(!
ÿº.˜»#©»ÇÅÃŒø'
üÞ%A
> The type returned when a response is classified as a failure.Á¤&
úü¬&B
? Depending on the classifier, this may simply indicate that theÁüó&C
@ request failed, or it may contain additional information aboutÁü»'8
5 the failure, such as whether or not it is retryable.Ádý'
ÀÀüÔ(@
ü(?
˜«\Ù(
ÀÀü¡1…
ü›)4
1 Attempt to classify the beginning of a response.ÁÔ)
úüÜ)F
C In some cases, the response can be classified immediately, withoutÁü§*5
2 waiting for a body to complete. This may include:Áá*
úüé*1
. - When the response has an error status code.ÁüŸ+@
= - When a successful response does not have a streaming body.Áüä+?
< - When the classifier does not care about streaming bodies.Á¨,
úü°,H
E When the response can be classified immediately, `classify_response`Áüý,G
D returns a [`ClassifiedResponse::Ready`] which indicates whether the矃-!
 response succeeded or failed.Áï-
úü÷-F
C In other cases, however, the classifier may need to wait until theÁüÂ.G
D response body stream completes before it can classify the response.ÁüŽ/D
A For example, gRPC indicates RPC failures using the `grpc-status`Áü×/8
5 trailer. In this case, `classify_response` returns aÁü”0D
A [`ClassifiedResponse::RequiresEos`] containing a type which willÁüÝ0?
< be used to classify the response when the body stream ends.ÁŒ¤1
á àï á ˆˆ»<Šå‘¦+“q8‚ õ™ð…¹ºÈ»ˆ¼½äu¾ˆÄ‚à­»‚¹èº‡»ÀÄÄ Õ1
ÀÈž ¶1
Ãàïð…$Â1
€õÐ1
!#üƒ4h
´¬2
 Classify an error.ÁÇ2
úüÏ2_
\ Errors are always errors (doh) but sometimes it might be useful to have multiple classes ofÁü³3K
H errors. A retry policy might allow retrying some errors and not others.Át†4
â àï â è†èºÀÆÆ ¥4
À·¡ •4
Äcè†dÔ4
è†<ã4
Åàïè†$˜4
²ö,ž4
<>ü«A
üñ4:
7 Transform the failure classification using a function.Á°5
úl¸5
íæÊ5
ú<Ò5
ž¢üÞ5
 use tower_http::classify::{Áü‚69
6 ServerErrorsAsFailures, ServerErrorsFailureClass,ÁüÀ6,
) ClassifyResponse, ClassifiedResponseÁ4ñ6
üü6%
" use http::{Response, StatusCode};Áô¦7
 use http_body_util::Empty;Á¬É7
¯”ã7
úüë7T
Q fn transform_failure_class(class: ServerErrorsFailureClass) -> NewFailureClass {Á¬Ä8
 match class {ÁüÞ8,
) // Convert status codes into u16Áü9=
: ServerErrorsFailureClass::StatusCode(status) => {矄98
5 NewFailureClass::Status(status.as_u16())ÁlŽ:
éíü :#
// Don't change errors.ÁüÈ:7
4 ServerErrorsFailureClass::Error(error) => {Áü„;-
* NewFailureClass::Error(error)Ál¶;
éíLÈ;
þ¡,Ö;
¢à;
úÔè;
 enum NewFailureClass {Á¤‡<
 Status(u16),Á´ <
 Error(String),Á,»<
¢Å<
úüÍ<_
\ // Create a classifier who's failure class will be transformed by `transform_failure_class`Áü±=^
[ let classifier = ServerErrorsAsFailures::new().map_failure_class(transform_failure_class);Á”>
úüœ>&
# let response = Response::builder()矂>2
/ .status(StatusCode::INTERNAL_SERVER_ERROR)Áüþ>$
! .body(Empty::<Bytes>::new())Á”§?
Ì„¾?
úüÆ?A
> let classification = classifier.classify_response(&response);ÁŒ@
ú¬”@
 assert!(matches!(Á¼®@
 classification,ÁüÊ@D
A ClassifiedResponse::Ready(Err(NewFailureClass::Status(500)))Á<“A
 ));Á<ŸA
ž¢Œ®A
àïý¤¸rÝQì±ìÄýüňÑàïý¤ÀÈ¿CÉÈÉÀ÷‚ ÀA
ž‡DÃA
Ø‘,B
–"ý¤èºüŸB&
ý¤ÑÛ˜"Œ‡D½B
Çàïý¤Œ‡$ÍA
± ÓA
bdgiƒC
üüBL
I Trait for classifying end of streams (EOS) as either success or failure.Á\ÓC
ÊÊØïüÉC™
ÊØïØï ËÌÍÏËÌÍÏÍìàïË”’D
ÜÝÏÍÌŒ’D
üåC(
û¨d—D
ÊÊüåDV
üªD6
3 Perform the classification from response trailers.ÁdèD
ã àïÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ ã ¸ÔÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
äÝÊ ŒE
Ê
Ìàï$õD
‹ùDûD
ü˜Gh
´ÁE
ÔÈÜE
úüäE_
€ÉüÈFK
éÉtG
ä àï ä è†äÝÊÎÎ ºG
Ê·¡ ªG
”ÌdéG
¤Ì<øG
Íàïè†$­G
²ö,³G
13ü“I
ü†H:
éËÅH
úüÍHA
> See [`ClassifyResponse::map_failure_class`] for more details.ÁŒ–I
àïý¤½ÚÊпCÑÐÑÊ÷‚ ¨I
ž‡D«I
Ø‘,õI
–"ý¤äÝü‡J&
ý¤¢ä˜"Œ‡D¥J
Ïàïý¤Œ‡$µI
± »I
bdgiôO
ü¤Mc
` A [`ClassifyEos`] type that can be used in [`ClassifyResponse`] implementations that never haveÁüˆN$
! to classify streaming responses.Á­N
úü±N]
Z `NeverClassifyEos` exists only as type. `NeverClassifyEos` values cannot be constructed.Á„šO
¥ÓÓ «O
…¨—Ñò6A{†”ÔÕ "ü´O"
T´O
ÒÒ‚àFu\»Ÿ¯Ž”ÜO
4ÜO
ÒÒˆê)?ÈXM´­üóO+
¥×× øO
…¨ØÙÚËÌÍÙÚ%'Œ¥P
dªP
ÖÖ¯ŽüÁPV
dÄP
å …¨Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ å ¸ÔÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
…¨ËÖ éP
Ö
Ù¯Ž$ÑP
 _trailersÁL×P
ü’Ri
t•R
æ …¨ æ 膒ëÖÛÛ µR
Ö·¡ ¤R
”ÌdäR
¤Ì<óR
Ú¯Žè†$§R
_errorÁ4­R
68üøS*
¥ÝÝ ýS
…¨ÞÀcÞü©T8
¬T
ç è é  ç …¨ è  c cˆ¢cµ
 `£c–ª `àB¤GS
é ½«Ü °T
Ü
Þ¯Ž$±T
± ·T
Ü W
Õ¨àá¤óW
üÂW,
) Create a new [`ServerErrorsAsFailures`].ÁúW
Õ¨ßß
àüÔY2
ü­XH
E Returns a [`MakeClassifier`] that produces `ServerErrorsAsFailures`.ÁúX
úü‚YM
Üð|ÛY
­­Ét¯ét‘&OõžàÖÕ¨ßß
áü½Z0
Õ¨ãäåçÁÂÃÅçåŒôZ
dùZ
ââ«©„¦[
\«[
ââÒÒ€IÔ IÕ²I—Ñò6A{†”«©üê[„
Β[
ê Õ¨ ê ¦ô¹ºÈ»ˆ¼½äu¾ˆÄ‚à­»‚¹Õ¨ÁÕ¨Ââææ ž\
â¹Â ÿ[
åÔˆ$\
€õ™\
üÐ^h
tÓ^
ë Õ¨ ë Çöëóâèè ò^
âõö â^
†÷d¡_
–÷<°_
çÇö$å^
²ö,ë^
-/üÆb.
«©êÅcêüûb8
þb
ì í î  ì «© í  c cˆ¢cµ
 `£c–ª `àB¤GS
î ½«é ‚c
é
ê$ƒc
± ‰c
„žIüK H [`Service`]s that return responses without wrapping other [`Service`]s.ÁL úüPc ` These kinds of services are also referred to as "leaf services" since they sit at the leaves ofÁÌ´  a [tree] of services.ÁÎ úüÒF …Àü™? < [tree]: https://en.wikipedia.org/wiki/Tree_(data_structure)ÁD¦IŒèOüÀO'$ Alias for a type-erased error type.ÁDñOž»Œ¡ˆˆ¢ˆl }.xϾ Ììô¤òü:HE A redirection [`Policy`] that combines the results of two `Policy`s.Áƒúü‡C@ See [`PolicyExt::and`][super::PolicyExt::and] for more details.Áýîïïî·ž Èž ²…vÞ¼z]mxðñ(*-/$  ííê…$—  ííð…(
Ô-óôóô·ž­Èž«Øê…
Øð…
²…õÙõæèëíˆŠï  ï ²…²…ò
Ôò
õê…ð…ß Û.÷ø÷ø·žŽÈžŠ ê…Š ð…²…¾ÁÅÈ(á/úûûú·žÈž¿cê…¿cð…²…üÀcüLOSVŽð ñ ò  ð ²… ñ  c cˆ¢cµ
 `£c–ª `àB¤GS
ò ½«ùáù
üê…ð…<±C8è0þÿÿþ·žWÈžV³ê…Ãݲ…´Šˆ²…ýý
ê…ð…̱
ü54
1 A redirection [`Policy`] created from a closure.Áj
úün+
( See [`clone_body_fn`] for more details.Á
ˆª È
õ†Õ,•Ÿ:Íiƒ 
Ñ
¢‡(£
1ˆªlØ¢‡È
õ†ÙŽUWó  ó õ†õ†£

¢‡§ ª
2ˆˆˆªŠ ¢‡È
õ†-0äÛünTQ A redirection [`Policy`] that removes credentials from requests in redirections.ÁŒæÚ‡T¿ tÄYŠŒŽÄþ”þ00ı”±0„Ï00(Ì3Ú‡Ù"$ô  ô Ú‡Ú‡Ì
o(Ó4Ú‡Àc"$õ ö ÷  õ Ú‡ ö  c cˆ¢cµ
 `£c–ª `àB¤GS
÷ ½«Ó
Ʊ̔•ü'OL A redirection [`Policy`] that limits the number of successive redirections.Á< åˆ¼‡»Ž^N„®K(
5åˆ045åˆÙOQø  ø åˆåˆ
œ 6åˆ(7刚Àcš"$ù ú û  ù åˆ ú  c cˆ¢cµ
 `£c–ª `àB¤GS
û ½«
šÆ±Ìœðü:HÀúƒúü‡A> See [`PolicyExt::or`][super::PolicyExt::or] for more details.Áûœœ·ž þÈž ؉ ÊËQžŸ(*-/ ŠXê…$” Xð…(Ò8¡¢¢¡·ž­Èž«ÉþþÚþ؉£Ù£ÖØÛÝxzü  ü ؉؉ Ò 
£ê…ð…Ï Ù9¥¦¥¦·ž~Èž}¬€þ½€؉ž¡¥¨(ß:¨©©¨·žñÈžð¯þÀ؉ªÀcª#&~ý þ ÿ  ý ؉ þ  c cˆ¢cµ
 `£c–ª `àB¤GS
ÿ ½«§ß§
ªê…ð…,±38æ;¬­¬­·ž'Èž&õƒþÃÝ؉®´®RUY\~؉««
®ê…ð…įü54†„júün)& See [`redirect_fn`] for more details.Á°°ˆª Åf•ì̹È/±  Îm¯¯¢‡(¡<³³ˆªlЇÅ´Ù´ˆMO
 
²¡²
´¢‡Ÿ ¨=ˆª
´ˆÅ ¬£ü@B? A redirection [`Policy`] that stops cross-origin redirections.ÁŸŒ£Å{䘎ª?¸L¿,¿~··(Œ
>ŸŒ04>ŸŒ»Ù»OQ
 
ŸŒŸŒºŒº
»œ ?ŸŒ8 ™@ŸŒ¾´¾"$ŸŒ½½
¾|—5üÛ3GD A value returned by [`Policy::redirect`] which indicates the actionÁü£4UR [`FollowRedirect`][super::FollowRedirect] should take for a redirection response.Á 4 5¼ŽŽ´ÛÏ×þ¶ÀÁÂÃÁÃ4Í5Ü­5 Follow the redirection.Á *¿¿¼Ž>@¿¿¼Ž$«6üÙ5MJ Do not follow the redirection, and return the redirection response as-is.Á ]¿¿¼Žqs¿¿¼Ž(!‚5
A¼Ž04A¼ŽÆÙÆOQ
 
¼Ž¼ŽÅ!‚5Å
Æœ "‰5B¼Ž(#5C¼ŽÉÀcÉ"$ƒ


 ƒ
¼Ž 
 c cˆ¢cµ
 `£c–ª `àB¤GS

½«È#5È
ÉÆ±Ìüä ,ü¯WT [`Layer`] for retrying requests with a [`Service`] to follow redirection responses.Áúü‹ 1. See the [module docs](self) for more details.Á
œï ¡ËËþ¶dƒ!ÕN³°t—çÌ ƒ!Õ L—!4—!ÊÊ¿($Æ D¡ÎÎþ¶QØ¿$ƒ!ÏÙÏsuUW
 
ÍÍ
Ï¿§ %Í E¡ÑÑþ¶úŠ ¿%ƒ!(&Ó F¡ÓÓþ¶F¿c¿&ƒ!ÔÀcÔilXZ
ˆ

 
 ˆ
 c cˆ¢cµ
 `£c–ª `àB¤GS

½«ÒÒ
Ô¿±8'Ú G¡ÖÖþ¶Q³¿'ƒ!×´×twXZÕÕ
׿üÆ'*ü™&XU Middleware that retries requests with a [`Service`] to follow redirection responses.Áò&úüö&1³§ tÑ'¤Ù¡ÚÚÙñ¸ à'®‘dã'­â$™
eÂÍÛÜ(*- ã'Õ D÷',÷'ØØ ‘L…(4…(ØØš‘((±'H¤Þ¡ßÞßñ¸²®‘й(à'š¹(ã'­àÙàÛݱ³xzŠ
 Š
­‘­‘Ý(±'Ý
à ‘š‘Ï )¸'I¤â¡ãâãñ¸ƒ®‘SŠ  ‘)à'Š š‘)ã'­‘³Ž(*¾'J¤å¡ææåñ¸®‘Ö¿c *à'¿cš‘*ã'­çÀcçADŽ
Œ

 
­ Œ
 c cˆ¢cµ
 `£c–ª `àB¤GS

½«ä*¾'ä
ç ‘š‘<±CØ+ ø+Z/ ªÃ8+™ Ž
 Ž
­ Ž
 ‘ 
è ‘š‘ ø+›# ø+Û7 èÄ8+¢ 
 
­ 
 ‘ 
é ‘š‘ à+¯ ø+ð6 ÍÆP+¶ ­‘ ‘
ê ‘š‘ ù2•º´ü…9+I2º( Response future for [`FollowRedirect`].ÁUtÕ9¤ìí¡îìíîñ¸ ä9Èž ç9Íìî ê9% ‘¯÷™0ó§ôr©ãt_"ïðñòóôõö[]`b\^á2“»4´:ëë²HµH¶HLeftÁ·Hˆ¸H¹HRightÁºHˆuÃÑñõoÑq ‘¯÷%  § §³˜ ªº µ2 ! 19¾ ¯÷°<ï:ëë ‘É4ƒ;ëëîâ4–;ëë¶£û®;ëë—ƒ<À;ëëóóôÄ–õˆ²  &$,„ñ@:]<Ú;ëë¸Ôw$ƒ<ëëÂÄÅÛÆˆÇÈÔYÉÊ©ql‰•uŽ€òð…(3¾9V¤øù¡úøùúñ¸¨Èž§“º¦´3ä9À3ç9¿cî3ê9¤º´¿cô»ûÀcû
ÉË


 
 
 c cˆ¢cµ
 `£c–ª `àB¤GS

½«÷3¾9÷
û ‘ð…î|±ƒY4ös 4üsù4¸{FT¤þÿ¡þÿñ¸DÈžC“º9¤º-Ÿ¡fimpkn4Ú•Á4Ý•
 
¤ƒ¡ƒ 4’–ñ¸Èž“º¤ºû
 ð…îthisÁ!4Œ–JMQTORù6¨ÝÕ16¨Õ^Q4ÝtƒU¤ˆ¡ˆÍ쥕û¿‘ú¤Ä𫔃U16¤Þ%¥•ôôÕ‘ö呦÷¦+¦Œ4ñŠ|å«•=¥•¯Æ% ƒUù5ÿÈ¥•ƒU«•ƒU ƒU-ñTŠ›S©SŒ-è7ŽÈSÄÛS¦+NJZ°"WƒU¥•«•NJZ°"WŠŒŽ16ÓÝilpsnq„¾„¾ù׆¾ ˜X$]È=„kt• ƒU²HµH¶H±º·Hˆ¸H¹HκºHˆuÃÑñõoÑqõÆ § §³˜ ªº µ2 ! 19¾¥•¯Æè8 ƒU¥•? ƒU—(F ƒU¶£HM ƒU—ƒhS ƒU³½ˆ* ƒU¸Ô¨0 ƒUÂÄÅÛÆˆÇÈÔYÉÊ©ql‰•uŽ€ò«•ù@¨ÝÕ1@¨Õgi4®xƒU¤¡õÅ
¿‘
¤Ä
“Æ1@¤Þ¥Æ
óÆù?ÿÈÇ ÇªÇéU›S˜©S-šè7ÈSœÄÛSž¦+*'¢§ˆ¥¾oƒU¥•«•*'¢§ˆ¥¾o˜šœž1@ÓÝ      
„¾„¾ù׆¾ ˜X$]È=„kt• ƒUêÉR]
 ƒU¥•rd
 ƒU—k
 ƒU¶£²r
 ƒU—ƒÒx
 ƒU³½òO
 ƒU¸ÔU
 ƒUËÌùI•‡1Iù…94Ü} „¾„¾ù׆¾ ˜X$]È=„kt•  ñTŠ›S©SŒ-è7ŽÈSÄÛS¦+NJZ°"W  ð…îý1I°‡ý
Ÿ ‘ð…î!IŇ')ùR•‡1Rù…Y4¢„¾„¾ù׆¾ ˜X$]È=„kt• ¢éU›S˜©S-šè7ÈSœÄÛSž¦+*'¢§ˆ¥¾o¢ ‘ð…îý1R°‡ý
¡ ‘ð…î!RŇ')ù[å½0\A[ñ½ƒU¤¤¥¦¡§¦¤§¥õÅk¿‘j¤Ä`¥ÆT££W ¨ÀW©›Sª©S«-¬è7­ÈS®Ä¯ÛS°¦+ˆ3¤Ðü/®šƒU¥•«•ˆ3¤Ðü/®š¨©ª«¬­®¯°1[ú½ILPSNQù[ܾ<[ܾ££‚àFu\»Ÿ ƒUù4݈tD££êɱ££001 AlwaysUnpinÁ3ˆ ‰4ä\’ÎM¥•n裣001‰Û3ˆ ‰4ä\’ÎM´££001‰Û3ˆ ‰4ä\’ÎM¶£úB££001‰Û3ˆ ‰4ä\’ÎM—ƒ@o££001‰Û3ˆ ‰4ä\’ÎM³½m££001‰Û3ˆ ‰4ä\’ÎM¸ÔΚ££001‰Û3ˆ ‰4ä\’ÎMËÌù[ÿe\ƒU²¤³´¡µ³²´µõÅ*¿‘)¤Ä“í))*PinnedFieldsOfHelperStructÁ,ˆ Úˆ3Clœ‰Ù(Á[ŒÁ¥Æt«”1[È¿°³·ºµ¸©dûé]ydêØïÁdûéØïØï!ùdÏê6]¥¸¸ dÔêŒ"¯Ž¹d×ꯎ ùd‘ëV]¤º»¡¼»º¼ñ¸ÀÈž¿“ºµ¤º©ÜßãæáäâüðU`] Response [`Extensions`][http::Extensions] value that represents the effective request URI ofÁüÑV;8 a response returned by a [`FollowRedirect`] middleware.ÁWúü‘W^[ The value differs from the original request's effective URI if the middleware has followedÁŒðWàõTžXâ–Ò ‡Î’T¾¿—ƒâ–â8—ƒâ–½½
¾<©X½½—ƒ(f‹Xˆâ–ÁÙÁ#%
 
â–â–Àf‹XÀ
Áp„ÅXDÊXÃù ÓX˜—ql‰•uŽ€òÄÅÇÈÉÊÅÆÔˆ˜—ÈÊHJÂÂ
ÅÔˆÔˆ˜—ÂÂÔé áXÂÂÔˆ,éX˜—˜—$ôX˜—˜—(g½XÌ̹¿cÔˆgÓX˜—ÍÀcÍ£¦Y[


 
˜— 
 c cˆ¢cµ
 `£c–ª `àB¤GS

½«Ëg½XË
ÍÔˆ± Œ”´­ gRPC status codes.ÁÄúüÈ1. These variants match the [gRPC status codes].Áúúüþwt [gRPC status codes]: https://github.com/grpc/grpc/blob/master/doc/statuscodes.md#status-codes-and-their-use-in-grpcÁDô—Â(‹yüÂþÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðÐÒÔÖØÚÜÞà  â

ä  æ  è

êìîðÚü¬)& The operation completed successfully.Á9ÎÎô—MOÎÎô—L‡üâ  The operation was cancelled.Á0ÎÎô—DFÎÎô—<­”– Unknown error.Á!ÎÎô—57ÎÎô—üº)& Client specified an invalid argument.Á9ÎÎô—MOÎÎô—„·üý52 Deadline expired before operation could complete.ÁEÎÎô—Y[ÎÎô—üÍ(% Some requested entity was not found.Á8ÎÎô—LNÎÎô—üˆ;8 Some entity that we attempted to create already exists.ÁKÎÎô—_aÎÎô—„«üÛKH The caller does not have permission to execute the specified operation.Á[ÎÎô—oqÎÎô—ŒëüÁ%" Some resource has been exhausted.Á5ÎÎô—IKÎÎô—”Ïü‚HE The system is not in a state required for the operation's execution.ÁXÎÎô—lnÎÎô—ôç The operation was aborted.Á-ÎÎô—ACÎÎô—ü— 1. Operation was attempted past the valid range.ÁAÎÎô—UWÎÎô—l”
üÝ 2/ Operation is not implemented or not supported.ÁBÎÎô—VXÎÎô—D¿
Ϥ
 Internal error.Á"ÎÎô—68ÎÎô—
üÍ
)& The service is currently unavailable.Á9ÎÎô—MOÎÎô— üŒ *' Unrecoverable data loss or corruption.Á:ÎÎô—NPÎÎô— üÉ >; The request does not have valid authentication credentialsÁNÎÎô—bdÎÎô—(hÿ
Šô—15Šô—óÙóQS˜
 ˜
ô—ô—òhÿò
óž i†ô—(jŒŒô—öÀcö#%
š

 
ô— š
 c cˆ¢cµ