
     i[{                        S SK Jr  S SKrS SKrS SKrS SKrS SKJrJrJ	r	J
r
  S SKJrJrJrJrJrJrJrJrJrJrJr  S SKJrJrJr  S SKJr  S SKJrJr  SqSqSr S	 r!S
r" " S S\5      r# " S S\5      r$ " S S\5      r%Sr&Sr'Sr(Sr)\RT                  " S\RV                  " \)5      -  5      r,\RT                  " S5      r-\RT                  " S5      r.\RT                  " S5      r/S r0 " S S5      r1 " S S\15      r2g)    )IntEnumN)ChunkedReaderLengthReader	EOFReaderBody)InvalidHeaderInvalidHeaderName
NoMoreDataInvalidRequestLineInvalidRequestMethodInvalidHTTPVersionLimitRequestLineLimitRequestHeadersUnsupportedTransferCodingObsoleteFoldingExpectationFailed)InvalidProxyLineInvalidProxyHeaderForbiddenProxyRequest)InvalidSchemeHeaders)bytes_to_strsplit_request_uri)permit_obsolete_foldingstrip_header_spacesc                    [        U SS5      nUS:X  a  g[        c	   SSKnSqUq[        (       d  US:X  a  [        S	5      e[        (       d  g[        [        S
5      (       d  US:X  a  [        S5      eg/ n[         H'  n[        XS5      (       d  M  UR                  U5        M)     U(       a$  US:X  a  [        SSR                  U5      -  5      egg! [         a    Sq Nf = f)a  Check if fast C parser is available and should be used.

Returns False if:
- http_parser='python' is explicitly set
- gunicorn_h1c is not installed (in 'auto' mode)
- gunicorn_h1c < 0.4.1 (in 'auto' mode)
- Incompatible compatibility flags are enabled (in 'auto' mode)

Raises RuntimeError if:
- http_parser='fast' but gunicorn_h1c is not installed
- http_parser='fast' but gunicorn_h1c < 0.4.1
- http_parser='fast' but incompatible flags are enabled
http_parserautopythonFNr   Tfastz1gunicorn_h1c not installed but http_parser='fast'r   zigunicorn_h1c >= 0.4.1 required for http_parser='fast'. Please upgrade: pip install --upgrade gunicorn_h1czqhttp_parser='fast' is incompatible with compatibility flags: %s. Use http_parser='python' or disable these flags.z, )
getattr_fast_parser_availablegunicorn_h1c_fast_parser_moduleImportErrorRuntimeErrorhasattr_FAST_PARSER_INCOMPATIBLE_FLAGSappendjoin)cfgparser_settingr"   incompatibleflags        G/var/www/ias/venv/lib/python3.13/site-packages/gunicorn/http/message.py_check_fast_parserr/   #   s	     S-8N!%	+%)"". "!n&>NOO!! &(:;;V#E 
  L/3e$$% 0 V#C))L)*  G  	+%*"	+s   C C"!C"s   

 
QUIT
c                        \ rS rSrSrSrSrSrg)	PPCommandf   zPROXY protocol v2 commands.r       N)__name__
__module____qualname____firstlineno____doc__LOCALPROXY__static_attributes__r4       r.   r1   r1   f   s    %EEr=   r1   c                   (    \ rS rSrSrSrSrSrSrSr	g)	PPFamilyl   z#PROXY protocol v2 address families.r   r3         r4   N)
r5   r6   r7   r8   r9   UNSPECINETINET6UNIXr<   r4   r=   r.   r?   r?   l   s    -FDEDr=   r?   c                   $    \ rS rSrSrSrSrSrSrg)
PPProtocolt   z&PROXY protocol v2 transport protocols.r   r3   rA   r4   N)	r5   r6   r7   r8   r9   rC   STREAMDGRAMr<   r4   r=   r.   rH   rH   t   s    0FFEr=   rH   i  i   z!#$%&'*+-.^_`|~z[%s0-9a-zA-Z]+z[a-z#]zHTTP/(\d)\.(\d)z[\0\r\n]c                     SU;   a  g [         R                  " U 5      nU H
  nX4;   d  M
    g   g! [         a     gf = f)zCheck if IP address is in the allow list.

Args:
    ip_str: The IP address string to check
    allow_list: The original allow list (strings, may contain "*")
    networks: Pre-computed ipaddress.ip_network objects from config
*TF)	ipaddress
ip_address
ValueError)ip_str
allow_listnetworksipnetworks        r.   _ip_in_allow_listrV      sQ     j!!&) =    s   0 
==c                   <    \ rS rSrS rS rS rS
S jrS rS r	Sr
g	)Message   c                    Xl         X l        X0l        X0l        S U l        / U l        / U l        S U l        UR                  (       a  SOSU l	        SU l
        SU l        UR                  U l        U R                  S::  d  U R                  [        :  a  [        U l        UR                  U l        U R                  S::  a  [        U l        U R                  =(       d    [        nU R                  US-   -  S-   U l        U R#                  U R                  5      nU R                  R%                  U5        U R'                  5         g )NhttpshttpFr   rA      )r*   unreader	peer_addrremote_addrversionheaderstrailersbodyis_sslscheme
must_close_expected_100_continuelimit_request_fieldsMAX_HEADERSlimit_request_field_sizeDEFAULT_MAX_HEADERFIELD_SIZEmax_buffer_headersparseunreadset_body_reader)selfr*   r^   r_   max_header_field_sizeunuseds         r.   __init__Message.__init__   s    "$	!$g&+# %($<$<!%%*,,{:(3D%(+(D(D%((A-,HD) !% = = ]A]"&";";"Q&#(*+#, DMM*V$r=   c                     SU l         g )NT)rg   rq   s    r.   force_closeMessage.force_close   s	    r=   c                     [        5       eN)NotImplementedError)rq   r^   s     r.   rn   Message.parse   s    !##r=   c                    U R                   n/ nUR                  S5       Vs/ s H  n[        U5      PM     nnSn0 n/ n	U(       a  On[        U R                  [
        5      (       a7  [        U R                  S   UR                  UR                  5       5      (       a  UR                  nUR                  n	U(       Ga  [        U5      U R                  :  a  [        S5      eUR                  S5      n
[        U
5      [        S5      -   nU
R                  S5      S::  a  [!        U
5      eU
R                  SS5      u  pU R                   R"                  (       a  UR%                  S5      n[&        R)                  U5      (       d  [+        U5      eUR-                  5       nUR/                  S5      /nU(       a  US   R1                  S	5      (       a  U R                   R2                  (       d  [5        U5      eUR                  S5      n
U[        U
5      [        S5      -   -  nXR6                  s=:  a  S:  a  O  O[        S
5      eUR9                  U
R/                  S5      5        U(       a  US   R1                  S	5      (       a  M  SR;                  U5      n[<        R?                  U5      (       a  [!        U5      eXR6                  s=:  a  S:  a  O  O[        S
5      eU(       d>  US:X  a8  URA                  5       S:X  a  U RB                  S:  a  OSU l"        O[G        U5      eX;   a;  XU   :H  nU(       a  SOSnU(       a  XRH                  :w  a
  [K        5       eOSnXl$        SU;   aO  X;   d  SU	;   a  OCU R                   RL                  S:X  a  O(U R                   RL                  S:X  a  GM  [+        U5      eUR9                  X45        U(       a  GM  U$ s  snf )N   
Fr   zlimit request headers fieldsz
:r3    	) 	z!limit request headers fields sizez	 r   EXPECTz100-continuer3   r3   Tr[   r\   _rM   	dangerousdrop)'r*   splitr   
isinstancer_   tuplerV   forwarded_allow_ipsforwarded_allow_networkssecure_scheme_headersforwarder_headerslenri   r   popfindr   r   rstripTOKEN_RE	fullmatchr	   upperstrip
startswithr   r   rk   r(   r)   !RFC9110_5_5_INVALID_AND_DANGEROUSsearchlowerra   rh   r   rf   r   
header_map)rq   datafrom_trailerr*   rb   linelinesscheme_headerr   r   currheader_lengthnamevaluesecurerf   s                   r.   parse_headersMessage.parse_headers   sW   hh 15

70CD0Cd#0CD  " T^^U33"4>>!#4c6M6M#&#?#?#AC C$'$=$=! # 5 5 7|t888)*HII 99Q<DIF3Myy~"#D))**S!,KDxx++{{5)%%d++'-- ::<D[['(E E!H//<<xx77)$//yy|TS[!88 #@#@D1D- /< = =TZZ./ E!H//<< HHUOE077>>#D))<<@q@)*MNNDH$4 ;;=N2||f, 6:3 ,E22,"==$* ,244 - %)M"(K d{,7H0HXX((K7XX((F2  ,D11NND=)o er W Es   Oc                     SnS nU R                    H  u  p4US:X  a  Ub
  [        SU S9eUnM  US:X  d  M$  UR                  S5       Vs/ s H  oUR                  5       PM     nnU H  nUR	                  5       S:X  a  U(       a
  [        SU S9eSnM,  UR	                  5       S:X  a  U(       a
  [        SU S9eMS  UR	                  5       S	;   a#  U(       a
  [        SU S9eU R                  5         M  [        U5      e   M     U(       aK  U R                  S
:  a
  [        SU S9eUb
  [        SU S9e[        [        X R                  5      5      U l        g Ubj   [        U5      R                  5       (       a  [        U5      nO
[        SU S9eUS:  a
  [        SU S9e[        [!        U R                  U5      5      U l        g [        [#        U R                  5      5      U l        g s  snf ! [         a    [        SU S9ef = f)NFzCONTENT-LENGTH)reqzTRANSFER-ENCODING,chunkedTidentity)compressdeflategzipr   r   )rb   r   r   r   r   rx   r   ra   r   r   r^   rd   str	isnumericintrP   r   r   )rq   r   content_lengthr   r   vvalsvals           r.   rp   Message.set_body_reader4  s   !\\MT''!-'(8dCC!&,, ,1;;s+;<+;a	+;<Cyy{i/""/0C"NN"&
2 #"/0C"NN #(GG""/0C"NN((*7>>#   *8  ||f$#$7TBB) $$4$??]4?@DI'@~&0022%(%8N'(8dCC !#$4$??\$--HIDIYt}}56DI] =L  @#$4$??@s   G#)G(  
G( (G=c                     U R                   (       a  gU R                   H<  u  pUS:X  d  M  UR                  5       R                  S5      nUS:X  a    gUS:X  a    g  O   U R                  S:*  $ )NT
CONNECTIONr   closez
keep-aliveFr3   r   )rg   rb   r   r   ra   )rq   hr   s      r.   should_closeMessage.should_closep  sa    ??llFQL GGIOOE*<,&  # ||v%%r=   )rh   rd   r*   rb   rk   ri   rm   rg   r_   r`   rf   rc   r^   ra   NF)r5   r6   r7   r8   rt   rx   rn   r   rp   r   r<   r4   r=   r.   rX   rX      s#    >$pd:7x&r=   rX   c                      ^  \ rS rSrSU 4S jjrSS jrS rS rS rSS jr	SS jr
S	 rS
 rS rS rS rS rU 4S jrSrU =r$ )Requesti~  c                   > S U l         S U l        S U l        S U l        S U l        UR
                  U l        U R
                  S:  a  [        U l        U R
                  S:X  a  SU l        O<U R
                  [        :  a  [        U l        [        U l        OU R
                  U l        X@l        S U l	        [        U5      U l        [        TU ]5  XU5        g )Nr   i   )methoduripathqueryfragmentlimit_request_lineMAX_REQUEST_LINE_fast_limit_request_line
req_numberproxy_protocol_infor/   	_use_fastsuperrt   )rq   r*   r^   r_   r   	__class__s        r.   rt   Request.__init__  s    	
 #&"8"8""Q&&6D# ""a',7D)$$(88,<D)&6D#,0,C,CD)$#'  ,C0	2r=   c                     UR                  5       nU(       d*  U(       a
  [        5       e[        UR                  5       5      eUR	                  U5        g r{   )readStopIterationr
   getvaluewriterq   r^   bufstopr   s        r.   get_dataRequest.get_data  s7    }}#o%S\\^,,		$r=   c                    [        5       nU R                  XSS9  U R                  R                  nUS:w  a"  U R                  S:X  a  U R                  XU5      nU R                  (       a  U R                  X5      $ U R                  X5      $ )NT)r   offr3   )		bytearray	read_intor*   proxy_protocolr   _handle_proxy_protocolr   _parse_fast_parse_pythonrq   r^   r   modes       r.   rn   Request.parse  sy    kx40 xx&&5=T__1--hTBC >>##H22!!(00r=   c           
         [        U5      nSn  [        R                  UUU R                  U R                  U R
                  U R                  R                  U R                  R                  S9n [-        US   5      U l        [-        US   5      U l        U R                  R2                  (       a  U R.                  R5                  5       U l        [        U R0                  5      S:X  a  [+        U R0                  5      e [7        U R0                  5      nUR:                  =(       d    SU l        UR<                  =(       d    SU l        UR>                  =(       d    SU l        SUS	   4U l         / U l!        US
    H  u  p[-        U5      R5                  5       n
[-        U	5      nSU
;   ad  U R                  RD                  nX;   d  SU;   a  OBU R                  RF                  S:X  a  O'U R                  RF                  S:X  a  M  [%        U
5      eU RB                  RI                  X45        M     US   nX=S $ ! [        R                   a\    [        U5      nU R                  X5        [        U5      n[        U5      U R                  U R                  -   :  a  [        S5      e GO1[        R                   a  n[        [        U5      5      eSnAf[        R                   a  n[        [        U5      5      eSnAf[        R                    a  n[!        [        U5      5      eSnAf[        R"                   a  n[#        [        U5      5      eSnAf[        R$                   a  n[%        [        U5      5      eSnAf[        R&                   a  n['        [        U5      5      eSnAf[        R(                   a  n[+        [        U5      5      eSnAff = fGM  ! [8         a    [+        U R0                  5      ef = f)z:Parse request using fast C parser (gunicorn_h1c >= 0.4.1).r   )last_lenr   ri   rk   !permit_unconventional_http_method"permit_unconventional_http_versionmax buffer headersNr   r    r3   minor_versionrb   r   rM   r   r   consumed)%bytesr#   parse_requestr   ri   rk   r*   r   r   IncompleteErrorr   r   rm   r   r   r   r   r   r	   r   
ParseErrorr   r   r   r   casefold_http_methodr   r   rP   r   r   r   ra   rb   r   r   r(   )rq   r^   r   r   r   resulteparts
name_bytesvalue_bytesr   r   r   r   s                 r.   r   Request._parse_fast  sP    Sz 1 -::%'+'D'D)-)B)B-1-J-J6:hh6`6`7;xx7b7b ;  . #6(#34v/ 88((++++-DK txx=A$TXX..	/%dhh/E JJ$"	[[&B
," 6/23
 '-i'8#J
+113D -E d{$(HH$>$>!,7H0HXX((K7XX((F2+D11LL.! (9& *%IG '66 Dt9x-Szt9t669V9VVV-.BCC W&77 /&s1v..&:: 2)#a&11&;; 3*3q622&99 1(Q00&88 0'A//&44 ,#CF++&11 1(Q001A `  	/$TXX..	/ss   AH6 ?O 6A,O%O8KO#K77OL""O9MO$M88ON##O:OO O9c                    U R                  XU R                  5      u  p2U R                  U5        [        U5      nUSS S:H  n UR	                  S5      nUSS S:H  nUS:  aH  U(       dA  U R                  X5        [        U5      n[        U5      U R                  :  a  [        S5      eOOMj  U(       a  U R                  R                  USS 5        gU R                  USU SS	9U l        XFS
-   S nU$ )z'Parse request using pure Python parser.NrA   r   s   

r   r   r=   F)r   r]   )	read_liner   parse_request_liner   r   r   r   rm   r   r^   ro   r   rb   )rq   r^   r   r   r   doneidxrets           r.   r   Request._parse_python  s     NN8$2I2IJ	% SzBQx7"))K(C8w&DQwtx-Szt9t666-.BCC 7   MM  ab*))$t*5)I78n
r=   c                     UR                  5       nU(       d%  U(       a
  [        5       e[        [        U5      5      eUR	                  U5        g)z7Read data from unreader and append to bytearray buffer.N)r   r   r
   r   extendr   s        r.   r   Request.read_into,  s6    }}#o%U3Z((

4r=   c                 F   [        U5      n UR                  S5      nUS:  a  XSs=:  a  S:  a  O  O[        XS5      eOO[        U5      S-
  Us=:  a  S:  a  O  O[        [        U5      U5      eU R	                  X5        [        U5      nM  USU [        XES-   S 5      4$ )z<Read a line from buffer, returning (line, remaining_buffer).r   r   rA   N)r   r   r   r   r   r   )rq   r^   r   limitr   r   s         r.   r   Request.read_line5  s    Sz))G$Cax??*3664y1}u(q(&s4y%88NN8):D  Tc
$Qwx.)+ 	+r=   c                     [        U5      U:  a"  U R                  X5        [        U5      U:  a  M"  [        USU 5      [        X#S 5      4$ )z.Read exactly count bytes from buffer/unreader.N)r   r   r   r   )rq   r^   r   counts       r.   
read_bytesRequest.read_bytesH  sG    #hNN8) #hS%[!9S[#999r=   c                 0   [        U5      S:  a"  U R                  X5        [        U5      S:  a  M"  US;   a.  USS [        :X  a!  U R                  5         U R	                  X5      $ US;   a*  USS S:X  a!  U R                  5         U R                  X5      $ U$ )zdHandle PROXY protocol detection and parsing.

Returns the buffer with proxy protocol data consumed.
   )v2r   N)v1r      s   PROXY )r   r   PP_V2_SIGNATUREproxy_protocol_access_check_parse_proxy_protocol_v2_parse_proxy_protocol_v1r   s       r.   r   Request._handle_proxy_protocolN  s     #hmNN8) #hm >!c#2h/&A,,.00?? >!c"1g&:,,.00?? 
r=   c                 
   [        U R                  [        5      (       ad  [        U R                  S   U R                  R
                  U R                  R                  5       5      (       d  [        U R                  S   5      egg)z2Check if proxy protocol is allowed from this peer.r   N)r   r_   r   rV   r*   proxy_allow_ipsproxy_allow_networksr   rw   s    r.   r  #Request.proxy_protocol_access_checkd  sh    t~~u--%dnnQ&79Q9Q&*hh&C&C&EG G'q(9::G .r=   c                    [        U5      nSU;  a$  U R                  X5        [        U5      nSU;  a  M$  UR                  S5      n[        USU 5      n[	        X4S-   S 5      nUR                  S5      n[        U5      S:w  a  [        U5      eUS   nUS   n	US   n
US;  a  [        S	U-  5      eUS
:X  aL   [        R                  " [        R                  U	5        [        R                  " [        R                  U
5        OQUS:X  aK   [        R                  " [        R                  U	5        [        R                  " [        R                  U
5         [        US   5      n[        US   5      nSUs=::  a  S::  a  O  OSUs=::  a  S::  d  O  [        SU-  5      eUU	UU
US.U l        U$ ! [         a    [        U5      ef = f! [         a    [        U5      ef = f! [         a    [        SU-  5      ef = f)zPParse PROXY protocol v1 (text format).

Returns buffer with v1 header consumed.
r   NrA   r   r  r3   rB   )TCP4TCP6zprotocol '%s' not supportedr  r  r]      zinvalid port %sr   i  r   client_addrclient_port
proxy_addr
proxy_port)r   r   r   r   r   r   r   r   socket	inet_ptonAF_INETOSErrorAF_INET6r   rP   r   )rq   r^   r   r   r   r   	remainingbitsprotos_addrd_addrs_portd_ports                r.   r   Request._parse_proxy_protocol_v1k  s    SzT!NN8):D T! ii D#J'd78n-	zz#t9>"4(( Qaa (("#@5#HIIF?-  8  8 f_-  &9  &9	=a\Fa\F f%%A,@5,@"#4t#;<< $!!  $
  7  -&t,,-  -&t,,-  	="#4t#;<<	=s&   :A
F/ A
G G! /GG!G:c                     [        U5      S:  a"  U R                  X5        [        U5      S:  a  M"  US   nUS   n[        R                  " S[	        USS 5      5      S   nUS-  S-	  nUS	:w  a  [        S
U-  5      eUS-  nU[        R                  [        R                  4;  a  [        SU-  5      eSU-   n[        U5      U:  a"  U R                  X5        [        U5      U:  a  M"  U[        R                  :X  a  SSSSSS.U l	        [        X(S 5      $ US-  S-	  n	US-  n
U
[        R                  :w  a  [        S5      e[	        USSU-    5      nU	[        R                  :X  a  US:  a  [        S5      e[        R                   " [        R"                  USS 5      n[        R                   " [        R"                  USS 5      n[        R                  " SUSS 5      S   n[        R                  " SUSS 5      S   nSnOU	[        R$                  :X  a  US:  a  [        S5      e[        R                   " [        R&                  USS 5      n[        R                   " [        R&                  USS 5      n[        R                  " SUSS 5      S   n[        R                  " SUSS 5      S   nSnO<U	[        R(                  :X  a  SSSSSS.U l	        [        X(S 5      $ [        SU	-  5      eUUUUUS.U l	        [        X(S 5      $ )zRParse PROXY protocol v2 (binary format).

Returns buffer with v2 header consumed.
   r     z>H   r      r]   rA   zunsupported version %d   zunsupported command %dr:   Nr  zonly TCP protocol is supportedz"insufficient address data for IPv4   
   r  $   z"insufficient address data for IPv6    "   r  rC   zunsupported address family %d)r   r   structunpackr   r   r1   r:   r;   r   r   rH   rJ   r?   rD   r"  	inet_ntopr$  rE   r&  rC   )rq   r^   r   ver_cmd	fam_protolengthra   commandtotal_header_sizefamilyprotocol	addr_datar*  r+  r,  r-  r)  s                    r.   r   Request._parse_proxy_protocol_v2  s    #hmNN8) #hm b'G	tU3r":%67: T>a'a<$%=%GHH D.9??IOO<<$%=%GHH K#h**NN8) #h** ioo%")##""(D$ S!3455 d"q(t# z((($%EFF#bf-.	X]]"{()MNN%%fnni!nEF%%fnni!nEF]]41R9!<F]]42b)9:1=FEx~~%{()MNN%%fooy2GF%%fooyB7GHF]]42b)9:1=F]]42b)9:1=FEx& #+##""(D$ S!3455 %%Dv%MNN $!!  $
  /011r=   c                 ~   UR                  SS5       Vs/ s H  n[        U5      PM     nn[        U5      S:w  a  [        [        U5      5      eUS   U l        U R
                  R                  (       di  [        R                  U R                  5      (       a  [        U R                  5      eS[        US   5      s=::  a  S::  d  O  [        U R                  5      e[        R                  U R                  5      (       d  [        U R                  5      eU R
                  R                  (       a  U R                  R                  5       U l        US   U l        [        U R                  5      S:X  a  [        [        U5      5      e [        U R                  5      nUR"                  =(       d    SU l        UR$                  =(       d    SU l        UR&                  =(       d    SU l        [(        R                  US   5      nUc  [+        US   5      e[-        UR/                  S5      5      [-        UR/                  S5      5      4U l        SU R0                  s=::  a  S	:  d3  O  U R
                  R2                  (       d  [+        U R0                  5      eg g s  snf ! [          a    [        [        U5      5      ef = f)
N    rA   rB   r      r3   r   r   )rA   r   )r   r   r   r   r   r*   r   METHOD_BADCHAR_REr   r   r   r   r   r   r   r   rP   r   r   r   
VERSION_REr   r   groupra   r   )rq   
line_bytesbitr(  r   matchs         r.   r   Request.parse_request_line  s   -7-=-=dA-FG-FcS!-FGt9>$\*%=>> 1g xx99 ''44*4;;77DG***4;;77!!$++..&t{{33 88((++++-DK 7 txx=A$\*%=>>	?%dhh/E JJ$"	[[&B
," $$T!W-=$T!W--EKKN+SQ-@A..88>>(66 ? /c HL  	?$\*%=>>	?s   JJ J<c                    > [         TU ]  5         [        U R                  R                  [
        5      (       a%  [        [        U R                  S5      5      U l        g g )Nr   )	r   rp   r   rd   readerr   r   r   r^   )rq   r   s    r.   rp   Request.set_body_reader<  sA    !dii&&	22\$--;<DI 3r=   )r   r   rd   r   rb   r   r   r   r   r   r   r   ra   )r3   r   )r   )r5   r6   r7   r8   rt   r   rn   r   r   r   r   r	  r   r  r  r  r   rp   r<   __classcell__)r   s   @r.   r   r   ~  sU    3:1Wr@+&:,;;z[2z57n= =r=   r   )3enumr   rN   rer"  r:  gunicorn.http.bodyr   r   r   r   gunicorn.http.errorsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   gunicorn.utilr   r   r!   r#   r'   r/   r  r1   r?   rH   r   rj   rl   RFC9110_5_6_2_TOKEN_SPECIALScompileescaper   rI  rJ  r   rV   rX   r   r4   r=   r.   <module>r\     s  
   	   K K    ] \ 5 9   # <@ F w    #   2 ::'2995Q+RSTJJx( ZZ*+
$&JJ{$; !(_& _&DA=g A=r=   