
    #jx                       U d Z ddlmZ ddlZddlZddlmZmZmZ ddl	m
Z
mZ er0ddlmZmZmZmZ ddlmZ eeeeeeef   eef   Zeeeed	f   eef   Zg d
Z ed      Zded<    ed      Zded<    ed      Zded<    G d dej8                        Zej<                   G d d             Zereeedf   Z ej<                   G d d             Z!ej<                   G d d             Z"eree!e"f   Z# e!dd      Z$ded<    e"dd      Z%ded<   e$e%ffZ&d ed!<   d6d"Z'd7d#Z(d7d$Z)d8d%Z*d9d&Z+d9d'Z,d9d(Z-d:d)Z.d;d*Z/	 	 	 	 	 	 d<d+Z0	 d=	 	 	 	 	 	 	 	 	 	 	 d>d,Z1d7d-Z2d?d.Z3d@d/Z4dAd0Z5dBd1Z6dCd2Z7	 	 	 	 dDd3Z8dEd4Z9	 	 	 	 	 	 dFd5Z:y)GzBPrivate version-range helpers used by :mod:`packaging.specifiers`.    )annotationsN)TYPE_CHECKINGAnyFinal   )InvalidVersionVersion)CallableIterableIteratorSequence)Union.)
FULL_RANGEbounds_for_speccoerce_versionfilter_by_rangesintersect_rangesintersect_specifier_boundsleast_version_abovematches_bounds_onlyrange_is_emptyranges_are_prerelease_onlyresolve_prereleasesstandard_rangeswildcard_rangesz0.dev0zFinal[Version]MIN_VERSION0MIN_RELEASEinfzFinal[float]_BOUNDARY_INFc                  T    e Zd ZdZ ej
                         Z ej
                         Zy)BoundaryKindz5Where a boundary marker sits in the version ordering.N)__name__
__module____qualname____doc__enumautoAFTER_LOCALSAFTER_POSTS     U/var/www/oz-panel.ru/ozpay-pub/venv/lib/python3.12/site-packages/packaging/_ranges.pyr"   r"   7   s    ?499;L$))+Kr,   r"   c                  T    e Zd ZdZdZddZddZddZddZddZ	ddZ
dd	Zdd
Zy)BoundaryVersiona  A point on the version line between two real PEP 440 versions.

    Relative to a base version V::

        V < V+local < AFTER_LOCALS(V) < V.post0 < AFTER_POSTS(V)

    AFTER_LOCALS is the upper bound of ``<=V``, ``==V``, ``!=V`` (no
    local), and the lower bound of the upper-side range of ``!=V``.
    AFTER_POSTS is the lower bound of ``>V`` (V final or pre-release),
    excluding V's post-releases per PEP 440.
    )_cached_dev_cached_epoch_cached_post_cached_pre_cached_trimmed_releasekindversionc                    || _         || _        t        |j                        | _        |j
                  | _        |j                  | _        |j                  | _
        |j                  | _        y N)r6   r5   trim_releasereleaser4   epochr1   prer3   postr2   devr0   )selfr6   r5   s      r-   __init__zBoundaryVersion.__init__V   sQ    	'3GOO'D$$]]";;#LL";;r,   c                   |j                   | j                  k7  ry|j                  }| j                  }t	        |      }t	        |      |k  ry|d| |k7  ryt        |t	        |            D ]  }||   dk7  s y |j                  | j                  k7  ry| j                  t        j                  k(  r4|j                  | j                  k(  xr |j                  | j                  k(  S |j                  | j                  k(  xs |j                  duS )z6Is ``other`` a version that this boundary sorts above?FNr   )r;   r1   r:   r4   lenranger<   r3   r5   r"   r)   r=   r2   r>   r0   )r?   otherother_releasetrimmed_releasetrimmed_lengthis         r-   
_is_familyzBoundaryVersion._is_family_   s    ;;$,,, 66_-}..)_<~s='9: 	AQ1$	 99(((99111::!2!22TuyyDDTDT7TTyyD,,,F

$0FFr,   c                    | j                   j                  }|d   }| j                  t        j                  k(  r|d   |d   dt
        ddf}|d   |d   |t
        fS )a  Sort key placing this boundary just above the versions it covers.

        It extends ``V``'s comparison key ``(epoch, release, suffix)`` with
        a trailing ``_BOUNDARY_INF`` local component, so the key sorts after
        ``V`` and every ``V+local`` (whose keys carry a real, finite local
        segment). ``suffix`` is the 6-int comparison suffix
        ``(pre_rank, pre_n, post_rank, post_n, dev_rank, dev_n)``.

        For an AFTER_POSTS boundary the suffix is replaced with one whose
        post number is ``_BOUNDARY_INF``, so the key also sorts after every
        ``V.postN``. An AFTER_LOCALS boundary uses ``V``'s suffix unchanged.
           r   r   )r6   _keyr5   r"   r*   r    )r?   version_keysuffixs      r-   
_order_keyzBoundaryVersion._order_keyx   s_     ll'''21~99000QiA}aCF1~{1~v}DDr,   c                p    t        |t              r!| j                         |j                         k(  S t        S r8   )
isinstancer/   rO   NotImplementedr?   rD   s     r-   __eq__zBoundaryVersion.__eq__   s/     e_-??$(8(8(:::r,   c                    t        |t              r!| j                         |j                         k  S | j                  |k  sy| j	                  |       S NFrQ   r/   rO   r6   rI   rS   s     r-   __lt__zBoundaryVersion.__lt__   sJ    e_-??$u'7'7'999 u$??5)))r,   c                    t        |t              r!| j                         |j                         kD  S | j                  |k\  ry| j	                  |      S )NTrW   rS   s     r-   __gt__zBoundaryVersion.__gt__   sG     e_-??$u'7'7'999<<5 u%%r,   c                4    t        | j                               S r8   )hashrO   r?   s    r-   __hash__zBoundaryVersion.__hash__   s    DOO%&&r,   c                |    | j                   j                   d| j                  d| j                  j                   dS )N(z, ))	__class__r#   r6   r5   namer]   s    r-   __repr__zBoundaryVersion.__repr__   s4    ..))*!DLL+;2diinn=MQOOr,   N)r6   r	   r5   r"   returnNone)rD   r	   re   bool)re   _BoundaryOrderKeyrD   objectre   rg   )rD   zBoundaryVersion | Versionre   rg   re   intre   str)r#   r$   r%   r&   	__slots__r@   rI   rO   rT   rX   rZ   r^   rd   r+   r,   r-   r/   r/   >   s9    
I'G2E**&'Pr,   r/   c                  <    e Zd ZdZdZd	dZd
dZddZddZddZ	y)
LowerBoundzLower bound of a version range.

    A version *v* of ``None`` means unbounded below (-inf).
    At equal versions, ``[v`` sorts before ``(v`` because an inclusive
    bound starts earlier.
    )_above	inclusiver6   c                D   || _         || _        |d | _        y t        |t              rS|j
                  t        j                  k(  rt        |j                         | _        y t        |j                         | _        y |r|j                  | _        y |j                  | _        y r8   )r6   rs   rr   rQ   r/   r5   r"   r*   _make_above_after_posts_make_above_after_locals__le__rX   r?   r6   rs   s      r-   r@   zLowerBound.__init__   su    " ?<@DK1 |||7775gooF6wG!..DK!..DKr,   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r8   rQ   rq   rR   r6   rs   rS   s     r-   rT   zLowerBound.__eq__   7    %,!!||u}},R5??1RRr,   c                   t        |t              st        S | j                  |j                  d uS |j                  y| j                  |j                  k7  r| j                  |j                  k  S | j                  xr |j                   S rV   rz   rS   s     r-   rX   zLowerBound.__lt__   sq    %,!!<<==,,== <<5==(<<%--//~~5eoo"55r,   c                D    t        | j                  | j                  f      S r8   r\   r6   rs   r]   s    r-   r^   zLowerBound.__hash__       T\\4>>233r,   c                t    | j                   rdnd}d| j                  j                   d| | j                  dS )N[r`   < >rs   rb   r#   r6   r?   brackets     r-   rd   zLowerBound.__repr__   s8    #S4>>**+1WIdll5EQGGr,   Nr6   _VersionOrBoundaryrs   rg   re   rf   ri   )rD   rq   re   rg   rk   rm   
r#   r$   r%   r&   ro   r@   rT   rX   r^   rd   r+   r,   r-   rq   rq      s)     3I)(S
64Hr,   rq   c                  <    e Zd ZdZdZd	dZd
dZddZddZddZ	y)
UpperBoundzUpper bound of a version range.

    A version *v* of ``None`` means unbounded above (+inf).
    At equal versions, ``v)`` sorts before ``v]`` because an exclusive
    bound ends earlier.
    )_belowrs   r6   c                2   || _         || _        |d | _        y t        |t              rJ|j
                  t        j                  k(  rt        |j                         | _        y |j                  | _        y |r|j                  | _        y |j                  | _        y r8   )r6   rs   r   rQ   r/   r5   r"   r)   _make_below_after_locals__ge__rZ   rx   s      r-   r@   zUpperBound.__init__   sr    " ?<@DK1 |||8886wG
 &nn!..DK!..DKr,   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r8   rQ   r   rR   r6   rs   rS   s     r-   rT   zUpperBound.__eq__  r{   r,   c                    t        |t              st        S | j                  y|j                  y| j                  |j                  k7  r| j                  |j                  k  S | j                   xr |j                  S )NFTr   rS   s     r-   rX   zUpperBound.__lt__  se    %,!!<<== <<5==(<<%--//>>!5eoo5r,   c                D    t        | j                  | j                  f      S r8   r~   r]   s    r-   r^   zUpperBound.__hash__  r   r,   c                t    | j                   rdnd}d| j                  j                   d| j                  | dS )N]ra   r   r   r   r   r   s     r-   rd   zUpperBound.__repr__!  s8    #S4>>**+1T\\,<WIQGGr,   Nr   ri   )rD   r   re   rg   rk   rm   r   r+   r,   r-   r   r      s)     3I),S
64Hr,   r   FzFinal[LowerBound]NEG_INFzFinal[UpperBound]POS_INFzFinal[tuple[Interval]]r   c                    t        |       }|dkD  r!| |dz
     dk(  r|dz  }|dkD  r| |dz
     dk(  r|t        |       k(  r| S | d| S )zDStrip trailing zeros from a release tuple for normalized comparison.r   r   N)rB   )r:   ends     r-   r9   r9   0  s`    
g,C
'gcAg&!+q 'gcAg&!+S\)7<wt}<r,   c                    g | j                   dd | j                   d   dz   }t        j                  | j                  |d      S )z5Smallest version in the next prefix: 1.2 -> 1.3.dev0.Nr   r   r;   r:   r>   )r:   r	   
from_partsr;   )r6   r:   s     r-   _next_prefix_dev0r   8  sC    >$>goob&9A&=>GGMM7JJr,   c                Z    t        j                  | j                  | j                  d      S )z7The .dev0 of a version's base release: 1.2 -> 1.2.dev0.r   r   )r	   r   r;   r:   r6   s    r-   
_base_dev0r   >  s     GMM7??PQRRr,   c                `    t        | t              s	 t        |       } | S | S # t        $ r Y y w xY wr8   )rQ   r	   r   r   s    r-   r   r   C  s:    gw'	g&G N7N  		s   ! 	--c                    | j                   | j                  | j                  t        | j                        t              dfd}|S )a  Predicate ``parsed > AFTER_POSTS(V)`` for a lower bound.

    Per PEP 440, ``>V`` excludes V's post-releases unless V is itself
    a post-release. AFTER_POSTS sits above V and every V.postN (with
    or without local), and just below the next release.
    c                     |       ry| j                   k7  ry| j                  }t        |      k  ry|d  k7  ryt        t        |            D ]  }||   dk7  s y | j                  k7  ryyNFTr   )r;   r:   rB   rC   r<   )parsedparsed_releaserH   rG   version_epoch
version_geversion_preversion_release_trimmeds      r-   abovez&_make_above_after_posts.<locals>.aboveY  s    f <<=(~//>*.EE~s>':; 	Aa A%	 ::$ r,   r   r	   re   rg   )r   r;   r<   r9   r:   rB   )r6   r   rG   r   r   r   r   s     @@@@@r-   ru   ru   L  sK     JMMM++K*7??;01N 0 Lr,   c                    | j                   | j                  | j                  | j                  | j                  t        | j                        t              dfd}|S )zPredicate ``parsed > AFTER_LOCALS(V)`` for a lower bound.

    Used by the upper-side range of ``!=V`` (when V has no local
    segment). AFTER_LOCALS sits above V and every ``V+local`` but
    just below ``V.post0``.
    c                $    |       ry| j                   k7  ry| j                  }t        |      k  ry|d  	k7  ryt        t        |            D ]  }||   dk7  s y | j                  k7  ry| j
                  k7  ry| j                  k7  S r   r;   r:   rB   rC   r<   r=   r>   
r   r   rH   rG   version_devr   r   version_postr   r   s
      r-   r   z'_make_above_after_locals.<locals>.above  s    f <<=(~//>*.EE~s>':; 	Aa A%	 ::$;;,&zz[((r,   r   r   r;   r<   r=   r>   r9   r:   rB   )	r6   r   rG   r   r   r   r   r   r   s	     @@@@@@@r-   rv   rv   t  ]     JMMM++K<<L++K*7??;01N) )* Lr,   c                    | j                   | j                  | j                  | j                  | j                  t        | j                        t              dfd}|S )zPredicate ``parsed <= AFTER_LOCALS(V)`` for an upper bound.

    Used by ``<=V``, ``==V``, ``!=V`` (no local). ``parsed`` is at or
    below the boundary when it is at or below V cmpkey-wise, or when
    it is in V's local family.
    c                $    |       ry| j                   k7  ry| j                  }t        |      k  ry|d  	k7  ryt        t        |            D ]  }||   dk7  s y | j                  k7  ry| j
                  k7  ry| j                  k(  S )NTFr   r   r   s
      r-   belowz'_make_below_after_locals.<locals>.below  s    f <<=(~//>*.EE~s>':; 	Aa A%	 ::$;;,&zz[((r,   r   r   )	r6   r   rG   r   r   r   r   r   r   s	     @@@@@@@r-   r   r     r   r,   c                z   | j                   }| j                  t        j                  k(  r]|j                   |j                  |j                  dz   d      S |j                  |j                  dz   nd}|j                  |dd      S |j                  )|j                  \  }}|j                  ||dz   fddd      S y)zLSmallest real version strictly above *boundary*, or ``None`` if none exists.Nr   r>   localr   r=   r>   r   r<   r=   r>   r   )r6   r5   r"   r)   r>   __replace__r=   r<   )boundarybase	next_postr5   numbers        r-   r   r     s    D}}111 88##1D#AA'+yy'<TYY]!	YATBB xxxxfT6A:$6TqPTUUr,   c                   |j                   y| j                   >|j                   xr/ t        |j                   t              xr |j                   t        k  S t        | j                   t
              rBt        | j                         }|+|j                   |k(  r|j                   S |j                   |k  S | j                   |j                   k(  r| j                  xr |j                   S | j                   |j                   kD  S )a  True when the range defined by *lower* and *upper* contains no versions.

    A boundary lower sits just below the next real version, so an ordered pair
    is still empty when the upper excludes that least successor:
    ``(AFTER_POSTS(1.0a1), 1.0a2.dev0)`` holds no version.
    F)r6   rs   rQ   r	   r   r/   r   )lowerupper	successors      r-   r   r     s     }}}}  -5=='2-,	
 %--1'6	 }}	) ??**==9,,}}%OO788==5==((r,   c                2   g }dx}}|t        |       k  r|t        |      k  rt| |   \  }}||   \  }}t        ||      }	t        ||      }
t        |	|
      s|j	                  |	|
f       ||k  r|dz  }n|dz  }|t        |       k  r|t        |      k  rt|S )zFIntersect two sorted, non-overlapping range lists (two-pointer merge).r   r   )rB   maxminr   append)leftrightresult
left_indexright_index
left_lower
left_upperright_lowerright_upperr   r   s              r-   r   r     s    
  F  J
s4y
 [3u:%=!%j!1
J#(#5 [J,J,eU+MM5%.) #!OJ1K s4y
 [3u:%=  Mr,   c              #    K   |Mg }d}t        |       dk(  r| d   \  }}|j                  }	|j                  }
|D ]j  }t        ||n ||            }||		 |	|      s&|
	 |
|      s1|j                  sd}| D|rt        ||      r| W|rZ|j                  |       l |s
|E d{    y|D ]  }t        ||n ||            }|| D ]n  \  }}|j                  }	|	
 |	|      s ;|j                  }
|
	 |
|      s5|j                  sd}| n&|rt        ||      r| n|s|j                  |          |s
|E d{    y|du }t        |       dk(  ri| d   \  }}|j                  }	|j                  }
|D ]C  }t        ||n ||            }||r|j                  r*|		 |	|      s5|
	 |
|      s@| E y|D ]g  }t        ||n ||            }||r|j                  r*| D ]9  \  }}|j                  }	|	
 |	|      s J|j                  }
|
	 |
|      s5|  g i y7 7 w)a  Filter *iterable* against precomputed version *ranges*.

    With ``prereleases=None``, the PEP 440 default applies: pre-releases are
    excluded unless no final matches, in which case buffered pre-releases come
    out at the end. A pre-release inside the opt-in ``region`` is the exception:
    it is force-admitted in place, as ``prereleases=True`` would yield it. A
    force-admitted pre-release is not a final, so it never suppresses the buffer.
    NFr   r   T)rB   rr   r   r   is_prereleaser   r   )rangesiterablekeyprereleasesregionprerelease_bufferfound_finalr   r   r   r   itemr   exclude_prereleasess                 r-   r   r     s     ')v;! "!9LE5LLELLE  3'TK>$U6]$U6]++"&KJ 3FF CJ$%,,T23 ,,, 	D#CKDSYGF~ & u$U6]=E&M!//&*"
$7$G"
()006		$ (((%.
6{a ayu 		D#CKDSYGF~"v';'; v}f
		 	 TC>6#7#7" 	LE5LLE vLLE}f
	[ -, )s@   BI I .H;/AI AI H>A8I A)I 1I >I c                j    | j                   | j                  dddd      S | j                  dd      S )z=Smallest non-pre-release at or above a pre-release *version*.Nr   r   )r<   r   r   s    r-   !_nearest_release_above_prereleaser   w  s@    {{ ""t$D"MM 4t44r,   c                
   | t         S t        | t              rS| j                  }|j                  rt        |      S |j                  |j                  dz   nd}|j                  |d      S | j                  s| S t        |       S )zSmallest non-pre-release version at or above *value*.

    ``None`` is the ``-inf`` floor, whose nearest non-pre-release is
    :data:`MIN_RELEASE`.
    Nr   r   )r=   r   )r   rQ   r/   r6   r   r   r=   r   )valueinner_versionr   s      r-   _lowest_release_at_or_abover     s     }%)&&4]CC 1>0B0B0N]''!+TU	((it(DD,U33r,   c                    | D ]U  \  }}t        |j                        }|j                  ||j                  k  r y||j                  k(  sH|j                  sU y y)zTrue when every range in *ranges* contains only pre-releases.

    Used to detect unsatisfiable specifier sets when ``prereleases=False``:
    if every range is pre-release-only, every contained version is excluded.
    FT)r   r6   rs   )r   r   r   nearests       r-   r   r     sW      u-emm<== Gemm$;emm# r,   c                    t        |      }t        |      }| dk(  rt        |d      t        |d      fgS t        t        |d      ft        |d      t
        fgS )z^Ranges for ==V.* and !=V.*.

    ==1.2.* -> [1.2.dev0, 1.3.dev0);  !=1.2.* -> complement.
    ==TF)r   r   rq   r   r   r   )opr   r   r   s       r-   r   r     se    
 tEd#E	TzE4(*UE*BCDD 
*UE*+	E4	 '* r,   c                   | dk(  rt        |d      t        fgS | dk(  r+t        t        t	        |t
        j                        d      fgS | dk(  r|j                  3|j                  |j                  dz   d      }t        |d      t        fgS |j                  4|j                  |j                  dz   dd	      }t        |d      t        fgS t        t	        |t
        j                        d
      t        fgS | dk(  r?|j                  r|n|j                  dd      }|t        k  rg S t        t        |d
      fgS t	        |t
        j                        }|r|n|}| dk(  rt        |d      t        |d      fgS | dk(  r$t        t        |d
      ft        |d
      t        fgS | dk(  rA|j                  |j                  dd       }t        |d      t        t        |      d
      fgS t        d|       )zRanges for the standard PEP 440 operators (no wildcard, no ===).

    *has_local* indicates whether the spec string included a ``+local``
    segment; relevant only for ``==`` / ``!=`` to decide whether the
    upper bound includes V's local family.
    z>=Tz<=r   Nr   r   r   r   Fr   r   z!=z~=r   )r:   zUnknown operator: )rq   r   r   r   r/   r"   r)   r>   r   r=   r*   r   r   r:   r   
ValueError)r   r6   	has_locallower_boundboundafter_localsr   prefixs           r-   r   r     s(    
TzGT*G455	Tz ?7L4M4MNPTU
 	
 
Sy;;" "--'++/-NKT2G<==<<#!--7<<!3CRV-WKT2G<==
 ?7L4L4LMuU
 	
 
Sy ,,G'2E2E!SW2E2X 	 KI*UE2344 #7L,E,EFL GlE	TzGT*Jud,CDEE	Tzj%01u%w/
 	

 
Tz$$W__Sb-A$B&
3DV3Le(TU
 	
 )"0
11r,   c                Z    |j                  d      rt        | |      S t        | |d|v       S )aD  Ranges for one specifier's ``(op, version_str)``.

    Dispatches between the wildcard and standard builders. ``version`` is the
    parsed ``version_str`` (its base, without the trailing ``.*``, for
    wildcards). ``===`` is not handled here; its match is a literal string
    compared in :mod:`packaging.specifiers`.
    z.*+)endswithr   r   )r   version_strr6   s      r-   r   r     s3     D!r7++2w{(:;;r,   c                \    d}| D ]  }||}t        ||      }|r n |t        d      |S )zIntersect each specifier's ranges into a single sequence.

    Short-circuits once the running intersection is empty, since no later
    specifier can revive it. Callers must pass at least one specifier.
    Nz4intersect_specifier_bounds called with no specifiers)r   RuntimeError)per_specifier_rangesr   subs      r-   r   r     sL     )-F# >F%fc2F ~QRRMr,   c                x    | D ]5  \  }}|j                   }|
 ||      s y|j                  }|	 ||      s5 y y)a$  Whether ``version`` falls within any of ``ranges``.

    The pure bounds membership test, for a single already-parsed version with
    no pre-release policy applied. ``ranges`` are sorted and non-overlapping,
    so a version below one range's lower bound is below every later range too.
    FT)rr   r   )r   r6   r   r   r   r   s         r-   r   r   #  sK      uU7^=E'N r,   c                    | | S |ryy)zResolve a specifier's effective default pre-release policy.

    An explicit ``configured`` value wins; otherwise an autodetected ``True``
    propagates and anything else falls back to the PEP 440 default (``None``).
    NTr+   )
configuredautodetecteds     r-   r   r   6  s     r,   )r:   tuple[int, ...]re   r   )r6   r	   re   r	   )r6   zVersion | strre   Version | None)r6   r	   re   zCallable[[Version], bool])r   r/   re   r   )r   rq   r   r   re   rg   )r   Sequence[Interval]r   r   re   list[Interval])r+   )r   r   r   zIterable[Any]r   z%Callable[[Any], Version | str] | Noner   bool | Noner   r   re   zIterator[Any])r   z Version | BoundaryVersion | Nonere   r	   )r   r   re   rg   )r   rn   r   r	   re   r  )r   rn   r6   r	   r   rg   re   r  )r   rn   r   rn   r6   r	   re   r  )r   zIterable[Sequence[Interval]]re   r   )r   r   r6   r	   re   rg   )r   r  r   r  re   r  );r&   
__future__r   r'   	functoolstypingr   r   r   r6   r   r	   collections.abcr
   r   r   r   r   tuplerl   float_BoundaryOrderSuffixrh   __all__r   __annotations__r   r    Enumr"   total_orderingr/   r   rq   r   Intervalr   r   r   r9   r   r   r   ru   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+   r,   r-   <module>r     sz   I "    -FF !c3c5j0A3!KLc5c?4H%OP" &h/^ / &cl^ * $El| *499  lP lP lP^ w=> 5H 5H 5Hp 7H 7H 7Ht Z+,H (e4	 4'e4	 4'.&8%:
" :=KS
%P$N$N*)@
 > "$ccc 
/c 	c
 c cL	54. B2J<6.&+6r,   