
    @OOf	                         d dl Z d dlZd dlZd dlZddddddZded	efd
Zej                  dedz  d	edz  fd       Z	de
dz  d	efdZd Zd Zej                  dedz  d	efd       Zy)    N      i   i   @l        )bkmgtsizereturnc                     | }|dk  r| dS dD ](  }|dz  }|dk  r	|d| c S |dk  s|dk(  s!|d| c S  t         )zkConvert a number of bytes into a human-readable string.

    len(return value) <= 5 always holds true.
    r   r   )r   r   r   r	   gX@z.1fr	   .0f)AssertionError)r
   ssuffixs      V/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/utils/human.pypretty_sizer      sq    
 A4xAw& &	T	u9WVH%%t8v}WVH%%&     r   c                    | y	 t        |       S # t        $ r Y nw xY wt        j                         D ]H  }| j	                  |      s	 t        | dd       t        |   z  c S # t        $ r Y  t        d      w xY w t        d      )z
    Parse a size with an optional k/m/... suffix.
    Invalid values raise a ValueError. For added convenience, passing `None` returns `None`.
    NzInvalid size specification.)int
ValueError
SIZE_UNITSkeysendswith)r   is     r   
parse_sizer       s     	y1v __ ::a=1Sb6{Z]22 
2
33	 2
33s   
 		A##	A:9A:secsc                 f    g d}| y|D ]  \  }}| |k\  s|j                  |       c S  | dz  ddS )N))d   z{:.0f}s)
   z{:2.1f}s)r   z{:1.2f}s i  r   ms)format)r   
formatterslimit	formatters       r   pretty_durationr'   5   sU    J
 |& *y5=##D))* Tk#b!!r   c                     t        j                  |       } t        j                  j                  t        j                  |             }|j                  d      S )Nz%Y-%m-%d %H:%M:%S)time	localtimedatetimefromtimestampmktimestrftimer   ds     r   format_timestampr1   E   s>    qA''A7A::)**r   c                 h    t         j                   j                  |       }|j                  d      d d S )Nz%Y-%m-%d %H:%M:%S.%f)r+   r,   r.   r/   s     r   format_timestamp_with_millir4   K   s/    ''*A::,-cr22r   addressc                 n   | y	 t        j                  | d         }|j                  rd| d    S t        |t         j                        rt        |       d| d    S |j                  rt        |j                         d| d    S dt        |       d| d    S # t        $ r | d    d| d    cY S w xY w)zn
    This function accepts IPv4/IPv6 tuples and
    returns the formatted address string with port number
    z<no address>r   z*:r   :[z]:)	ipaddress
ip_addressis_unspecified
isinstanceIPv4Addressstripv4_mappedr   )r5   hosts     r   format_addressrA   P   s     ,##GAJ/
|$$dI112$i['!*..$**+,Agaj\::3t9+R
|,, ,!*Qwqzl++,s"   +B ,B (B B B43B4)r+   	functoolsr9   r)   r   r   r>   r   	lru_cacher   floatr'   r1   r4   tuplerA    r   r   <module>rG      s        
				
c c " 4#* 4t 4 4("%$, "3 " +3
 ,EDL ,S , ,r   