
    \jj                        d Z ddlZddlZddlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZmZmZmZmZmZ ddlZded	efd
Z G d d      Z G d de      Z G d de      Zdeded	ej2                  fdZdeej8                     d	eegef   fdZdeegef   dz  dedz  d	eee   dz  gee   dz  f   fdZdede dedz  ded	eegef   dz  f
dZ!ded	e"ee f   fdZ#ded	e"eedz  f   fdZ$ded	e fdZ%ded e d	efd!Z&d"eegef   d#eegef   dz  d	eejN                  ejP                  egef   fd$Z)dedededz  d%ed	e"ejP                  eegef   dz  f   f
d&Z*d'ed(ef   d	e"eejP                     e+eeegef   f   edz  f   fd)Z,d'ed(ef   d*e+eeegef   f   d+edz  d	ed(ef   fd,Z-d-ed	e"eef   fd.Z.d/ejP                  d0ejN                  d	efd1Z/d/d2d0ejN                  d3e ded	ef
d4Z0d5d6d	efd7Z1d/d2d0ejN                  d8ed	efd9Z2 G d: d;ej0                        Z3 G d< d=ej.                        Z4d>ejj                  d0ejN                  d?ejl                  d	dfd@Z7 G dA dBejj                        Z8ddddddCdDdEdEdEddFd'ed(ef   dedz  dGeejj                     dz  dHedz  dIedz  dJedz  dKedLe dMe dNe dOe dPe+eef   dz  d	ejj                  fdQZ9 G dR dSejt                        Z;y)Ta  Minimal declaration layer over Click 8.x for the ``hf`` CLI.

This module vendors *only* the slice of Typer the CLI actually uses: turning
annotated function signatures (``Annotated[T, Option(...)]`` / ``Argument(...)``)
into Click parameters, and rendering argument/option help the way Typer did.
It exists so the CLI depends on Click's stable public API instead of Typer's
now-internal vendored Click (``typer._click``), which Typer reserves the right
to refactor at any release.

Deliberately *not* implemented (add a case here only when a command needs it):
rich rendering, shell-completion install commands, prompts/confirmation options,
env-var options, ``File``/``UUID`` params, ``count`` options, ``default_factory``.
Click's own machinery already handles exceptions, aborts, exits, and native
``_HF_COMPLETE`` shell completion, so none of Typer's ``main()`` overrides are
reproduced here.

The interesting logic mirrors four Typer functions, kept faithful so ``--help``
output stays byte-identical:
- :func:`_get_click_type`          <- ``typer.main.get_click_type``
- :func:`_build_click_param`       <- ``typer.main.get_click_param``
- :func:`_make_handler`            <- ``typer.main.get_callback``
- :class:`HfArgument` / :class:`HfOption` help records <- ``typer.core.Typer*``
    N)CallableSequence)datetime)Path)	UnionType)	AnnotatedAnyLiteralUnionget_args
get_originnamereturnc                 B    | j                         j                  dd      S )zWNormalize a Python identifier to a CLI name (``force_download`` -> ``force-download``)._-)lowerreplace)r   s    Q/root/.hermes/venv/lib/python3.12/site-packages/huggingface_hub/cli/_framework.pyget_command_namer   2   s    ::<S))    c                       e Zd ZdZdddddddddededz  deez  d	ed
ededef   dz  dedz  de	j                  dz  ddfdZy)ParameterInfou,  Base marker holding the (tiny) set of Click knobs the CLI actually sets.

    ``callback`` is a Typer-style value parser ``fn(value) -> parsed`` — it does NOT
    receive Click's ``(ctx, param, value)``. It consumes the enum/list convertors, so
    ``value`` is already converted when it runs.
    NTFhelpshow_defaulthiddenis_eagercallbackmin
click_typeparam_declsr   r   r   r   r   .r    r!   r   c                    t        |      | _        || _        || _        || _        || _        || _        || _        || _        y N)	listr"   r   r   r   r   r   r    r!   )	selfr   r   r   r   r   r    r!   r"   s	            r   __init__zParameterInfo.__init__F   sC      ,	(  $r   )__name__
__module____qualname____doc__strboolr   r	   intclick	ParamTyper'    r   r   r   r   >   s      #'.2-1%% Dj% Sj	%
 % % 38$t+% 4Z% OOd*% 
%r   r   c                       e Zd ZdZy)OptionzKDeclare a CLI option, e.g. ``Annotated[str | None, Option("--revision")]``.Nr(   r)   r*   r+   r1   r   r   r3   r3   [   s    Ur   r3   c                       e Zd ZdZy)ArgumentzGDeclare a positional CLI argument, e.g. ``Annotated[str, Argument()]``.Nr4   r1   r   r   r6   r6   _   s    Qr   r6   
annotationinfoc                    |j                   |j                   S | t        u rt        j                  S | t        u rt        j
                  S | t        u r<|j                   t        j                  |j                        S t        j                  S | t        u r<|j                   t        j                  |j                        S t        j                  S | t        u rt        j                  t              S | t        u rt        j                         S t!        | t"              rst%        | t&        j(                        rY| D cg c]  }|j*                   }}t-        d |D              st/        d| j0                  d      t        j2                  |      S t5        |       t6        u r5t        j2                  t9        |       D cg c]  }t        |       c}      S t/        d| d      c c}w c c}w )z>Map a (already unwrapped) annotation to a Click ``ParamType``.)r    )	path_typec              3   <   K   | ]  }t        |t                y wr$   )
isinstancer,   ).0values     r   	<genexpr>z"_get_click_type.<locals>.<genexpr>z   s     >e:eS)>s   zUnsupported enum z&: only str-valued enums are supported.zUnsupported CLI annotation z/. Add a case in `_framework._get_click_type()`.)r!   r,   r/   STRINGr-   BOOLr.   r    IntRangeINTfloat
FloatRangeFLOATr   r   DateTimer<   type
issubclassenumEnumr>   all	TypeErrorr(   Choicer   r
   r   )r7   r8   itemvaluesr>   s        r   _get_click_typerQ   h   s}   "S||TzzS/3xx/Cu~~$((+RRU151EuDHH-V5;;VTzzD))X~~*d#
:tyy(I)34$**44>v>> /
0C0C/FFlmnn||F##*(||Xj5IJESZJKK
1*?no
pp 5 Ks   =G'?G,	enum_typec                 ~    | D ci c]  }t        |j                        | c}dt        dt        ffd}|S c c}w )zGMap a parsed choice string back to its ``Enum`` member (mirrors Typer).r>   r   c                 >    | j                  t        |             S y r$   )getr,   )r>   	value_maps    r   	convertorz"_enum_convertor.<locals>.convertor   s    ==U,,r   )r,   r>   r	   )rR   memberrW   rV   s      @r   _enum_convertorrY      sB    9BCvV\\"F*CI  
  Ds   :innerdefault_valuec                 X     dt         t           dz  dt        t           dz  f fd}|S )zUTurn Click's tuple (from ``multiple=True``) into a list, applying ``inner`` per item.r>   Nr   c                 h    | t        |       dk(  ry | D cg c]  }r |      n| c}S c c}w )Nr   )len)r>   rO   r[   rZ   s     r   rW   z"_list_convertor.<locals>.convertor   s9    =]2s5zQ;@A4ud$.AAAs   /)r   r	   r%   )rZ   r[   rW   s   `` r   _list_convertorr_      s3    
B#- B$s)d2B B
 r   is_listc                     d}|j                   5t        | t              r%t        | t        j
                        rt        |       }|rt        ||      S |S )zBuild the value convertor for a param (``None`` when no coercion is needed).

    An explicit ``click_type`` (e.g. ``SoftChoice``) owns its own conversion, so no
    enum convertor is added on top of it.
    N)r!   r<   rH   rI   rJ   rK   rY   r_   )r7   r`   r[   r8   rZ   s        r   _make_convertorrb      sK     E:j$#?Jz[_[d[dDe
+um44Lr   c                 (   t        |       }|t        t        fv rSt        |       D cg c]  }|t	        d      us| }}t        |      dk7  rt        d| d      |d   } t        |       }|t        t        fv rt        |       d   dfS | dfS c c}w )zVStrip ``T | None`` / ``Optional[T]`` and ``list[T]``; return ``(base_type, is_list)``.N   zUnsupported union annotation z!; only ``T | None`` is supported.r   TF)	r   r   r   r   rH   r^   rM   r%   r   )r7   originargnon_nones       r   _unwrap_optional_and_listrh      s    
#F%###+J#7QC3d4j;PCQQx=A;J>Ijklla[
J'$!!
#A&,,u Rs
   BBc                     t        |       t        u rOt        |       }t        d |dd D        d      }|%t        d |dd D        d      x}rt	        |d      }|d   |fS | dfS )z[Split ``Annotated[T, Option(...)]`` into ``(T, marker)``; ``(annotation, None)`` otherwise.c              3   B   K   | ]  }t        |t              s|  y wr$   )r<   r   r=   metas     r   r?   z#_split_annotated.<locals>.<genexpr>   s     TJt]4StTs   rd   Nc              3   8   K   | ]  }t        |      s|  y wr$   )_is_typer_markerrk   s     r   r?   z#_split_annotated.<locals>.<genexpr>   s     4idRbcgRhT4is   Tfrom_annotatedr   )r   r   r   next_from_typer_marker)r7   argsmarkertyper_markers       r   _split_annotatedrv      sz    **
#TQRTVZ[>t4id12h4iko/pp|p'TJFAwtr   objc                     t        |       j                  j                  d      d   dk(  xr t        |       j                  dv S )N.r   typer)
OptionInfoArgumentInfo)rH   r)   	partitionr(   )rw   s    r   rn   rn      s<    9))#.q1W<ucASASWuAuur   rl   rp   c                ~   t        t        | dd      xs d      }t        |       j                  dk(  r+t        | dd      }|rt	        |t
              r|g|}t        }nt        } ||t        | dd      t        | dd	      t        | d
d      t        | dd      t        | dd      t        | dd      t        | dd      dS )zKTranslate a ``typer.models.OptionInfo`` / ``ArgumentInfo`` into our marker.r"   Nr1   r{   default.r   r   Tr   Fr   r   r    r!   r   )r%   getattrrH   r(   r<   r,   r3   r6   )rl   rp   r"   r   clss        r   rr   rr      s    wt]D9?R@KDzl* $	3/j#6"1[1K#)	T64(T>48tXu-z51z40D%&4t4	 	r   user_callbackrW   c                 p     dt         j                  dt         j                  dt        dt        f fd}|S )zSAdapt a Typer-style value parser ``fn(value) -> parsed`` to a Click param callback.ctxparamr>   r   c                 0     r |            S |      S r$   r1   )r   r   r>   rW   r   s      r   click_callbackz,_wrap_param_callback.<locals>.click_callback   s    Yu-FFFFr   )r/   Context	Parameterr	   )r   rW   r   s   `` r   _wrap_param_callbackr      s:    
GEMM G%// G# GRU G r   signature_defaultc                 d   |t         j                  j                  u }|rdn|}t        |t        j
                        r|j                  }||r
t               n	t               }t        |      \  }}t        ||||      }|j                  t        |j                  |      }	d}
nd}	|}
t        |t              rPt        | gt        ||      |||rdnd|j                  |	|j                   |j"                  |j$                  
      }||
fS |t&        u }| g}|j(                  r|j+                  |j(                         n)t-        |       }|j/                  |rd| d| nd|        t1        ||rdnt        ||      |||||j                  |	|j                   |j"                  |j$                        }||
fS )zXBuild a Click ``Parameter`` (and its post-parse value convertor) for one function param.Nrd   )	rH   requiredr   nargsr   r   r   r   r   z--z/--no-)
rH   r   r   is_flagmultipler   r   r   r   r   )inspectr   emptyr<   rJ   rK   r>   r6   r3   rh   rb   r   r   
HfArgumentrQ   r   r   r   r   r-   r"   extendr   appendHfOption)r   r7   r8   r   r   r[   	base_typer`   rW   param_callbackhandler_convertorargumentr   declskebaboptions                   r   _build_click_paramr      s    !G$5$5$;$;;H$D*;M-+%++|%xz682:>Iw	7M4HI }} 4HXa4b9=%$!F D1!"Q]]#**;;
 *** 4GFET%%& &'r%ug.E7|LT/)T"BYY&&{{F $$$r   func.c                    g }i }d}t        j                  |       j                  j                         D ];  \  }}|j                  t         j
                  j                  ur|j                  nt        }t        |      \  }}t        |t              rMt        |t        j                        s0|j                  j                  d      d   dk(  r|j                   dk(  r|}|j"                  }	t%        |	      r<|t'        |	d      }t)        |	dd	      }
|
d	u rt         j
                  j                  n|
}	t+        ||||	      \  }}||j,                  |||j,                  <   |j/                  |       > |||fS )
zLIntrospect ``func`` and return ``(params, convertors, context_param_name)``.Nry   r   rz   r   Fro   r   .)r   	signature
parametersitemsr7   r   r   r,   rv   r<   rH   rI   r/   r   r)   r}   r(   r   rn   rr   r   r   r   r   )r   params
convertorscontext_param_namer   	sig_paramr7   r   r8   r   marker_defaultclick_paramrW   s                r   _build_paramsr   ?  sl    %'F24J%)",,T2==CCE #i .7-A-AIZIZI`I`-`Y))fi
*:6	4i&y%--0 $$..s3A6'AiFXFX\eFe!%%---.|)*;ER$%6	3GN;IS;P 1 1 7 7Vd!3D)TK\!]Y [%5%5%A+4J{''(k"1#2 :111r   r   r   c                 `     dt         dt         f fd}t        j                  |        |S )zZWrap ``func`` so Click's kwargs map back to it, applying convertors and injecting the ctx.kwargsr   c                      | j                         D ci c]  \  }}||v r |   |      n| }}}t        j                         |<    di |S c c}}w )Nr1   )r   r/   get_current_context)r   keyr>   call_kwargsr   r   r   s       r   handlerz_make_handler.<locals>.handleri  sm    gmgsgsguvYcY\^cssj7H_Z_U3eSvv).3.G.G.IK*+"k"" ws   A)r	   	functoolsupdate_wrapper)r   r   r   r   s   ``` r   _make_handlerr   b  s-    ## ## # Wd+Nr   optc                 f    | dd }|j                         rd| fS | dd |k(  r
| dd | dd fS || dd fS )zPSplit an option string into ``(prefix, name)`` (Click's ``split_opt``, inlined).Nrd       )isalnum)r   firsts     r   
_split_optr   z  sT    GE}}3w
1Qx52AwAB#ab'>r   r   r   c                 v    |j                   }d|_         	 | j                  |d      ||_         S # ||_         w xY w)NTF)call)resilient_parsingget_default)r   r   	resilients      r   _extract_default_help_strr     s>    %%I C*  5 1 )	s   / 	8zHfArgument | HfOptionshow_default_is_strc                 t    rd j                    dS t        |t        t        f      rdj	                   fd|D              S t        |t
        j                        rt        |j                        S t        j                  |      ryt         t              rg j                  r[ j                  rO|r2 j                  rt         j                  d         d   S t        |      S t         j                  d         d   S t         t              r j                  r j                  s|syt        |      S )	N()z, c              3   :   K   | ]  }t        |        y wr$   )_default_string)r=   rO   r   r   r   s     r   r?   z"_default_string.<locals>.<genexpr>  s     jTX5H$Ojs   z	(dynamic)r   rd   r   )r   r<   r%   tuplejoinrJ   rK   r,   r>   r   
isfunctionr   is_bool_flagsecondary_optsoptsr   )r   r   r   r[   s   ``` r   r   r     s     5%%&a((-$/yyj\ijjj-+=&&''-(%"u'9'9e>R>R38:::ejjm,Q/U3}CUU%..q12155%"u'9'9%BVBV_l}r   
param_typez!click.IntRange | click.FloatRangec                 ,   | j                   d| j                  rdnd | j                   S | j                  d| j                  rdnd | j                    S | j                  rdnd}| j                  rdnd}| j                    | d| | j                   S )zHuman-readable range hint like ``x>=1`` or ``1<=x<10``.

    Reproduces click's private ``_NumberRangeBase._describe_range()`` using the public
    ``IntRange``/``FloatRange`` attributes, so the framework stays on Click's public API.
    x<z<=>z>=)r    max_openmaxmin_open)r   leftrights      r   _describe_number_ranger     s     ~~*--3488HII~~*--3488HII%%34D&&CDEnndV1UGJNN+;<<r   	base_helpc                 ,   g }t        | |      }t        | j                  t              }|s|<| j                  s|j                  r$t	        | |||      }|r|j                  d|        t        | t              r\t        | j                  t        j                  t        j                  f      r(t        | j                        }|r|j                  |       | j                  r|j                  d       |r ddj                  |       d}|r| d| S |S |S )zWAppend the ``[default: ...; required]`` suffix to a help string (shared by arg/option).z	default: r   [; ]z  )r   r<   r   r,   r   r   r   rH   r/   rB   rE   r   r   r   )	r   r   r   extrar[   r   default_string	range_strsuffixs	            r   _build_help_extrar     s    E-eS9M$U%7%7=}8e>P>PTWTdTd(5H-XLL9^$456%"z%**u~~uO_O_>`'a*5::6	LL#~~Z TYYu%&a(+4)Bvh'@&@r   c                        e Zd ZdZdddddee   dedz  deez  d	ed
eddf fdZde	j                  defdZde	j                  deeef   dz  fdZ xZS )r   zPPositional argument that renders help text and a metavar (Click's does neither).NTF)r   r   r   r"   r   r   r   attrsr   c                P    || _         || _        || _        t        |   |fi | y r$   )r   r   r   superr'   )r&   r"   r   r   r   r   	__class__s         r   r'   zHfArgument.__init__  s-     	(..r   r   c                 V   | j                   1| j                   }| j                  s|j                  d      sd| d}|S | j                  xs dj	                         }| j                  sd| d}| j
                  j                  | |      }|r|d| z  }| j                  dk7  r|dz  }|S )Nr   r   r   r   :rd   z...)metavarr   
startswithr   upperrH   get_metavarr   )r&   r   vartype_vars       r   make_metavarzHfArgument.make_metavar  s    <<#,,C==)<#ajJyyB%%'}}cU!*C99((3(7Qxj>!C::?5LC
r   c                 v    | j                   ry | j                  |      t        | || j                  xs d      fS )Nr   r   )r   r   r   r   r&   r   s     r   get_help_recordzHfArgument.get_help_record  s8    ;;  S )+<T3		UW+XXXr   )r(   r)   r*   r+   r   r,   r-   r	   r'   r/   r   r   r   r   __classcell__)r   s   @r   r   r     s    Z  #'/c]/ Dj	/
 Sj/ / / 
/ #  Y5== YU38_t5K Yr   r   c                   V    e Zd ZU dZeez  ed<   dej                  de	eef   dz  fdZ
y)r   zJOption whose help record ports Typer's default/metavar rendering verbatim.r   r   r   Nc                 @     j                   ry ddt        t           dt        f fd} | j                        g} j                  r!|j                   | j                               t          j                  xs d      }rdndj                  |      |fS )NFr   r   c                     t         j                  j                  |       \  }}|rdj                  s$j                  s|dj                         z  }|S )NT r   )r/   
formattingjoin_optionsr   countr   )r   rvany_slashesany_prefix_is_slashr   r&   s      r   _write_optsz-HfOption.get_help_record.<locals>._write_opts  sX    #..;;DAOB&*#<<

$+++4566Ir   r   r   z / )	r   r   r,   r   r   r   r   r   r   )r&   r   r  r   	help_textr   s   ``   @r   r   zHfOption.get_help_record  s    ;;#	hsm 	 	 $))$%IIk$"5"567%dCbA	+<<R@)KKr   )r(   r)   r*   r+   r-   r,   __annotations__r/   r   r   r   r1   r   r   r   r     s6    T*L5== LU38_t5K Lr   r   command	formatterc                    g }g }| j                  |      D ]X  }|j                  |      }||j                  dk(  r|j                  |       8|j                  dk(  sH|j                  |       Z |r+|j	                  d      5  |j                  |       ddd       |r,|j	                  d      5  |j                  |       ddd       yy# 1 sw Y   8xY w# 1 sw Y   yxY w)zLRender params split into "Arguments" and "Options" sections (mirrors Typer).Nr   r   	ArgumentsOptions)
get_paramsr   param_type_namer   sectionwrite_dl)r  r   r  rs   r   r   records          r   _format_paramsr    s    "$D"$D##C(  &&s+>  J.KK""h.KK  {+ 	%t$	%y) 	%t$	% 	% 	% 	%	% 	%s   C1CCC"c                   L    e Zd ZdZdej
                  dej                  ddfdZy)	HfCommandzJLeaf command that renders arguments and options in separate help sections.r   r  r   Nc                     t        | ||       y r$   )r  r&   r   r  s      r   format_optionszHfCommand.format_options'  s    tS),r   )r(   r)   r*   r+   r/   r   HelpFormatterr  r1   r   r   r  r  $  s*    T-%-- -E<O<O -TX -r   r  z	[OPTIONS]TF)r   r   r   epilog
short_helpoptions_metavaradd_help_optionno_args_is_helpr   
deprecatedcontext_settingsr   r   r  r  r  r  r  r   r  r  c                    t        |       \  }}}t        | ||      }|rt        j                  |      nt        j                  |       } |xs t
        ||nt        | j                        |||||||||	|
|xs i       S )z}Build a Click ``Command`` from a function with ``Annotated`` params.

    Replaces ``typer.main.get_command_from_info``.
    )r   r   r   r   r  r  r  r  r  r   r  r  )r   r   r   cleandocgetdocr  r   r(   )r   r   r   r   r  r  r  r  r  r   r  r  r   r   r   r   command_helps                    r   build_commandr   +  s    & .;4-@*FJ*D*.@AG-17##D)w~~d7KLC9%T+;DMM+J''')/R r   c                   p   e Zd ZU dZeZeej                     e	d<   dej                  dej                  ddfdZdej                  dee   fdZ	 ddd	d
edz  deej                     dz  dedeedef   gedef   f   fdZdddej&                  d
ededdfdZdddedeedef   gedef   f   fdZy)HfGroupa  Command group with the decorator API the CLI relies on (``command``/``callback``/``add_group``).

    Subclasses (see ``HFCliTyperGroup``) layer on styling, aliases, topics and error
    enrichment; this base only wires functions to Click via :func:`build_command`.
    command_classr   r  r   Nc                 B    t        | ||       | j                  ||       y r$   )r  format_commandsr  s      r   r  zHfGroup.format_options[  s    tS),S),r   c                 ,    t        | j                        S r$   )r%   commandsr   s     r   list_commandszHfGroup.list_commands_  s    DMM""r   )r   r   r   r   .c                \     dt         dt        f   dt         dt        f   f fd}|S )Nr   .r   c                 z    t        | fxs j                  d}j                  ||j                         | S )N)r   r   )r   r#  add_commandr   )r   r  r   r   r   r&   s     r   	decoratorz"HfGroup.command.<locals>.decoratorf  s>    #D]t9R@R@R]V\]GWgll3Kr   r   r	   )r&   r   r   r   r,  s   ```` r   r  zHfGroup.commandc  s5    	HS#X. 	8CH3E 	 	
 r   F)r   groupr   c                D    ||_         ||_        | j                  ||       y)z[Register a subgroup under ``name`` (which may carry pipe aliases, e.g. ``"repos | repo"``).N)r   r   r+  )r&   r.  r   r   s       r   	add_groupzHfGroup.add_groupm  s     
%r   )invoke_without_commandr1  c                T     dt         dt        f   dt         dt        f   f fd}|S )zRegister the function invoked for this group (named ``group_callback`` because Click
        already uses the ``callback`` attribute for the group's own handler).r   .r   c                    t        |       \  }}}t        | ||      _        g j                  |_        _        rd_        j                  0| j                  r$t        j                  | j                        _        | S )Nz[COMMAND] [ARGS]...)
r   r   r   r   r1  subcommand_metavarr   r+   r   r  )r   r   r   r   r1  r&   s       r   r,  z)HfGroup.group_callback.<locals>.decoratory  sy    5B45H2FJ 2)$
<NODM1DKK1&1DK*@D'%*?'yy T\\#,,T\\:	Kr   r-  )r&   r1  r,  s   `` r   group_callbackzHfGroup.group_callbacks  s0    
	HS#X. 
	8CH3E 
	 r   r$   )r(   r)   r*   r+   r  r#  rH   r/   Commandr  r   r  r  r%   r,   r(  r	   r   r  Groupr-   r0  r5  r1   r   r   r"  r"  Q  s%    *3M4&2-%-- -E<O<O -TX -# #49 #
 "&LP$J/3EMM/BT/I\_	8CH%&c(::	; JO &u{{ &S &$ &SW & 16)-	8CH%&c(::	;r   r"  )<r+   rJ   r   r   collections.abcr   r   r   pathlibr   typesr   typingr   r	   r
   r   r   r   r/   r,   r   r   r3   r6   r0   rQ   rH   rK   rY   r%   r_   r-   rb   r   rh   rv   rn   rr   r   r   r   r   dictr   r   r   r   r   r   r   r   r   r6  r  r  r  r   r7  r"  r1   r   r   <module>r=     s  0    .    G G *3 *3 *% %:V] VR} Rq q= qU__ q8	tDII 	8SE3J3G 	
SE3J$&
7:Tz
x}t#$d3i$&667
"36:ERseSjD  # %T	2B  sMD4H/H)I .v# v$ vS T m :SE3J'4<cUCZ4H44Ou}}eoos3S89>%
>%>%&3d&:>%OR>%
5??HcUCZ04778>%B 2
38
 2
4 $sHcUCZ,@'@"A3:MN 2F
38
S(C5#:../ d
 c3h	0C E#s(O *U__ *5== *S *").MQbe*='J =s =4 5== UX ]` ,$Y $YNLu|| LB%EMM % %%J]J] %bf %(- - &*!& !.2#
38
# *# 
emm	t	#	#
 *# $J# d
# # # # # # 38nt+# ]]#L4ekk 4r   