
    u×gP[                    X   U d Z ddlmZ ddlZ ej                  e      ZddlZddlZddl	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mZmZ ddlmZ dd	lmZmZ dd
lmZmZ ddlm Z  ddl!m"Z"m!Z! ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+  e!jX                         Z- e!j\                         Z/d:d;dZ0 e0       Z1ed   Z2de3d<   ed   Z4de3d<   e2e4z  Z5de3d<   ed   Z6 G d de      Z7e8e9e9f   Z:de3d<   i Z;de3d<   d<dZ<d=dZ=d>d Z>ee9ge9f   Z?ed!   Z@e$ G d" d#             ZA G d$ d%e      ZB G d& d'e      ZCe$ G d( d)             ZDed*   ZE G d+ d,      ZF G d- d.      ZG e	j                  d/      ZId?d0ZJd@dAd2ZKe1d1df	 	 	 	 	 	 	 dBd3ZLdCd4ZMeFe5z  ZNde3d5<    eFd67      ZO eFd87      ZPd9ZQy)DaK   The resources module provides the Resources class for easily configuring
how BokehJS code and CSS resources should be located, loaded, and embedded in
Bokeh documents.

Additionally, functions for retrieving `Subresource Integrity`_ hashes for
Bokeh JavaScript files are provided here.

Some pre-configured Resources objects are made available as attributes.

Attributes:
    CDN : load minified BokehJS from CDN
    INLINE : provide minified BokehJS from library static directory

.. _Subresource Integrity: https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity

    )annotationsN)relpath)Path)CallableClassVarLiteralProtocol	TypeAlias	TypedDictcastget_args   )__version__)CSS_RESOURCESJS_RESOURCES)IDPathLike)Model)LogLevelsettings)	dataclassfield)ROOT_DIR)generate_session_id)is_full_releasec                D    |rdnd}| d| xs t          d|xs t         dS )Nhttpshttpz://:/)DEFAULT_SERVER_HOSTDEFAULT_SERVER_PORT)hostportsslprotocols       /lib/python3.12/site-packages/bokeh/resources.py
server_urlr(   H   s3    w6HZs46#67q9TAT8UUVWW    )inlinecdnserverrelativeabsoluter
   BaseMode)z
server-devzrelative-devzabsolute-devDevModeResourcesModebokehbokeh-glbokeh-widgetsbokeh-tablesbokeh-mathjaxz	bokeh-apic                  "    e Zd ZU ded<   ded<   y)ComponentDefslist[Component]jscssN__name__
__module____qualname____annotations__ r)   r'   r9   r9   U   s    	r)   r9   Hasheszdict[str, Hashes]_ALL_SRI_HASHESc                 V    t         dz  j                  d      } t        d | D              S )zL Report all versions that have SRI hashes.

    Returns:
        tuple

    _sriz*.jsonc              3  4   K   | ]  }|j                     y wN)stem).0files     r'   	<genexpr>z'get_all_sri_versions.<locals>.<genexpr>o   s     +UTtyyUs   )r   globset)filess    r'   get_all_sri_versionsrP   g   s*     $$X.E+U+++r)   c                
   | t         vrG	 t        t        dz  |  dz        5 }t        j                  |      t         | <   ddd       t         |    S t         |    S # 1 sw Y   xY w# t
        $ r}t        d|        |d}~ww xY w)a   Report SRI script hashes for a specific version of BokehJS.

    Bokeh provides `Subresource Integrity`_ hashes for all JavaScript files that
    are published to CDN for full releases. This function returns a dictionary
    that maps JavaScript filenames to their hashes, for a single version of
    Bokeh.

    Args:
        version (str) :
            The Bokeh version to return SRI hashes for. Hashes are only provided
            for full releases, e.g "1.4.0", and not for "dev" builds or release
            candidates.

    Returns:
        dict

    Raises:
        ValueError: if the specified version does not exist

    Example:

        The returned dict for a single version will map filenames for that
        version to their SRI hashes:

        .. code-block:: python

            {
                'bokeh-1.4.0.js': 'vn/jmieHiN+ST+GOXzRU9AFfxsBp8gaJ/wvrzTQGpIKMsdIcyn6U1TYtvzjYztkN',
                'bokeh-1.4.0.min.js': 'mdMpUZqu5U0cV1pLU9Ap/3jthtPth7yWSJTu1ayRgk95qqjLewIkjntQDQDQA5cZ',
                'bokeh-api-1.4.0.js': 'Y3kNQHt7YjwAfKNIzkiQukIOeEGKzUU3mbSrraUl1KVfrlwQ3ZAMI1Xrw5o3Yg5V',
                'bokeh-api-1.4.0.min.js': '4oAJrx+zOFjxu9XLFp84gefY8oIEr75nyVh2/SLnyzzg9wR+mXXEi+xyy/HzfBLM',
                'bokeh-tables-1.4.0.js': 'I2iTMWMyfU/rzKXWJ2RHNGYfsXnyKQ3YjqQV2RvoJUJCyaGBrp0rZcWiTAwTc9t6',
                'bokeh-tables-1.4.0.min.js': 'pj14Cq5ZSxsyqBh+pnL2wlBS3UX25Yz1gVxqWkFMCExcnkN3fl4mbOF8ZUKyh7yl',
                'bokeh-widgets-1.4.0.js': 'scpWAebHEUz99AtveN4uJmVTHOKDmKWnzyYKdIhpXjrlvOwhIwEWUrvbIHqA0ke5',
                'bokeh-widgets-1.4.0.min.js': 'xR3dSxvH5hoa9txuPVrD63jB1LpXhzFoo0ho62qWRSYZVdyZHGOchrJX57RwZz8l'
            }

    .. _Subresource Integrity: https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity

    rF   z.jsonNzMissing SRI hash for version )rD   openr   jsonload	Exception
ValueError)versionfes      r'   get_sri_hashes_for_versionrZ   r   s    R o%	Oh'WIU*;;<+/99Q<( = 7##?7##	 =< 	O<WIFGQN	Os-   A% AA% A"A% %	B.A==Bc                    t               st        d      t        t        j                         dz  j                  d            } t        t              }t        |      t        |       k  rt        d      t        |      t        |       kD  rt        d      g }| D ]]  }t        |j                        j                  dd      \  }}| dt         d| }t        |      }||   |k7  sM|j                  |       _ |rt        d	|      y
)a6   Verify the SRI hashes in a full release package.

    This function compares the computed SRI hashes for the BokehJS files in a
    full release package to the values in the SRI manifest file. Returns None
    if all hashes match, otherwise an exception will be raised.

    .. note::
        This function can only be called on full release (e.g "1.2.3") packages.

    Returns:
        None

    Raises:
        ValueError
            If called outside a full release package
        RuntimeError
            If there are missing, extra, or mismatched files

    z7verify_sri_hashes() can only be used with full releasesr;   z	bokeh*.jsz5There are unexpected 'bokeh*.js' files in the packagez2There are 'bokeh*.js' files missing in the package.r   -z$SRI Hash mismatches in the package: N)r   rV   listr   bokehjs_pathrM   rZ   r   lenRuntimeErrorstrnamesplit_compute_single_hashappend)pathshashesbadpathrc   suffixfilenamesri_hashs           r'   verify_sri_hashesrn      s    ( RSS('')D066{CDE'4F
6{SZRSS
6{SZOPPC499~++C3fV1[M6(3'-(x'JJt  A#IJJ r)   )r<   r;   c                  "    e Zd ZU ded<   ded<   y)RuntimeMessagezLiteral['warn']typerb   textNr=   rB   r)   r'   rp   rp      s    

Ir)   rp   c                      e Zd Zedd       Zy)UrlsFnc                     y rH   rB   
componentskinds     r'   __call__zUrlsFn.__call__   s    BEr)   N)rw   	list[str]rx   Kindreturnrz   r>   r?   r@   staticmethodry   rB   r)   r'   rt   rt      s    E Er)   rt   c                      e Zd Zedd       Zy)HashesFnc                     y rH   rB   rv   s     r'   ry   zHashesFn.__call__   s    ?Br)   N)rw   rz   rx   r{   r|   rC   r}   rB   r)   r'   r   r      s    B Br)   r   c                  B    e Zd ZU ded<    ee      Zded<   dZded<   y)	Urlsrt   urls)default_factorylist[RuntimeMessage]messagesNzHashesFn | Nonerh   )r>   r?   r@   rA   r   r^   r   rh   rB   r)   r'   r   r      s!    
L%*4%@H"@"FO"r)   r   )__css____javascript__c                     e Zd ZU dZ eej                        ZeZ	de
d<   de
d<   de
d<   de
d	<   g d
g dZde
d<   g dZde
d<   	 d+dddddddddd		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d,dZddd-dZd.dZeZed+d/d       Zed0d       Zej*                  d1d       Zed.d       Zd2dZd3dZd4dZd5dZd5dZd6d Zed7d!       Zed8d"       Zed8d#       Z ed9d$       Z!d.d%Z"ed8d&       Z#ed8d'       Z$ed8d(       Z%d.d)Z&d.d*Z'y):	Resourcesa%  
    The Resources class encapsulates information relating to loading or
    embedding Bokeh Javascript and CSS.

    Args:
        mode (str) : how should Bokeh JS and CSS be included in output

            See below for descriptions of available modes

        version (str, optional) : what version of Bokeh JS and CSS to load

            Only valid with the ``'cdn'`` mode

        root_dir (str, optional) : root directory for loading Bokeh JS and CSS assets

            Only valid with ``'relative'`` and ``'relative-dev'`` modes

        minified (bool, optional) : whether JavaScript and CSS should be minified or not (default: True)

        root_url (str, optional) : URL and port of Bokeh Server to load resources from

            Only valid with ``'server'`` and ``'server-dev'`` modes

    The following **mode** values are available for configuring a Resource object:

    * ``'inline'`` configure to provide entire Bokeh JS and CSS inline
    * ``'cdn'`` configure to load Bokeh JS and CSS from ``https://cdn.bokeh.org``
    * ``'server'`` configure to load from a Bokeh Server
    * ``'server-dev'`` same as ``server`` but supports non-minified assets
    * ``'relative'`` configure to load relative to the given directory
    * ``'relative-dev'`` same as ``relative`` but supports non-minified assets
    * ``'absolute'`` configure to load from the installed Bokeh library static directory
    * ``'absolute-dev'`` same as ``absolute`` but supports non-minified assets

    Once configured, a Resource object exposes the following public attributes:

    Attributes:
        js_raw : any raw JS that needs to be placed inside ``<script>`` tags
        css_raw : any raw CSS that needs to be places inside ``<style>`` tags
        js_files : URLs of any JS files that need to be loaded by ``<script>`` tags
        css_files : URLs of any CSS files that need to be loaded by ``<link>`` tags
        messages : any informational messages concerning this configuration

    These attributes are often useful as template parameters when embedding
    Bokeh plots.

    r/   moder   r   r   
_log_levelr:   rw   r2   )r;   r<   zClassVar[ComponentDefs]_component_defs)r3   r4   r5   r6   r7   zClassVar[list[Component]]_default_componentsN)	rW   root_dirdevminified	log_levelroot_urlpath_versionerrw   base_dirc       	           |	|	nt        | j                        | _        t        j                  |      }|j                  d      }||nt        j                  xs || _        t        t        |r|d d n|      | _	        | j                  t        t              vrt        d|       |r&| j                  j                  d      st        d      |r&| j                  j                  d      st        d      |r&| j                  j                  d      st        d	      t        j                  |      | _        ~t        j                  |      | _        ~|| j                  rd
}t        j"                  |      | _        ~t        j$                  |      | _        ~|| _        ~|r|j                  d      s|dz   }|| _        g | _        | j                  xdk(  r7 | j-                         }| j*                  j/                  |j*                         n9dk(  r5| j1                         }| j*                  j/                  |j*                         |
t3        |
      | _        y t        j4                         | _        y )Nz-devzvwrong value for 'mode' parameter, expected 'inline', 'cdn', 'server(-dev)', 'relative(-dev)' or 'absolute(-dev)', got r-   zDsetting 'root_dir' makes sense only when 'mode' is set to 'relative'r+   z>setting 'version' makes sense only when 'mode' is set to 'cdn'r,   zBsetting 'root_url' makes sense only when 'mode' is set to 'server'Fr    )r^   r   rw   r   	resourcesendswithr   r   r/   r   r   rV   
startswithrootdirr   cdn_versionrW   r   r   r   	_root_urlr   	_cdn_urlsextend_server_urlsr   r_   r   )selfr   rW   r   r   r   r   r   r   rw   r   mode_devr+   r,   s                 r'   __init__zResources.__init__+  s    )3(>*DIaIaDb!!$'==(/3x||/Gx49dC	99HX..^^b]ce 
 DII00<cdd499//6]^^DII00:abb ((2++G4H ))(3!++I6,H--c2#~H!iinn&$$S\\2**,$$V__5*2*>XHDYDYD[r)   )rw   c                  t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  ||nt        | j                        | j                  
      S )zK Make a clone of a resources instance allowing to override its components. )
r   rW   r   r   r   r   r   r   rw   r   )r   r   rW   r   r   r   r   r   r   r^   rw   r   )r   rw   s     r'   clonezResources.clonem  sc    LL]]]]nn^^..%/%;zdooAV]]
 	
r)   c                    d| j                   g}| j                  r|j                  d       | j                  | j                  k7  r|j                  d| j                         ddj                  |       dS )Nzmode=zdev=Truezcomponents=z
Resources(z, ))r   r   rf   rw   r   join)r   argss     r'   __repr__zResources.__repr__|  sj    		}%&88KK
#??d666KK+doo%89:DIIdO,A..r)   c                d    t        |t              r|S t        t        j                  |            S )Nr   )
isinstancer   r   r   )clsr   s     r'   buildzResources.build  s(    i+("4"4Y"?@@r)   c                    | j                   S rH   )r   r   s    r'   r   zResources.log_level  s    r)   c                ^    t        t              }|||v st        d| d|       || _        y )NzUnknown log level 'z', valid levels are: )r   r   rV   r   )r   levelvalid_levelss      r'   r   zResources.log_level  s9    ),!625'9N|n]^^r)   c                J    | j                   | j                   S | j                  S rH   )r   _default_root_urlr   s    r'   r   zResources.root_url  s"    >>%>>!)))r)   c                d    | j                   D cg c]  }|| j                  |   v s| c}S c c}w rH   )rw   r   )r   rx   comps      r'   components_forzResources.components_for  s1    !%WDD<P<PQU<V4VWWWs   --c                    | j                   rdnd}| j                  |      D cg c]  }| | d|  }}|D cg c]  }| j                  |z  |z   }}|S c c}w c c}w )N.min r\   )r   r   r   )r   rx   r   	componentrO   rK   rg   s          r'   _file_pathszResources._file_paths  sp    !]]6BFBUBUVZB[\B[YI;xj$0B[\9>?%,? ]?s
   AAc                (   g }t        t        j                  j                         d       D ]b  \  }}t	        ||d      }|xt
        d x\    ||vs&|j                  |       8 t        d x \   |D ]  }||vs|j                  |        b d |S )zI Collect external resources set on resource_attr attribute of all models.c                    | d   S )Nr   rB   )args    r'   <lambda>z7Resources._collect_external_resources.<locals>.<lambda>  s    TWXYTZr)   )keyNrB   )sortedr   model_class_reverse_mapitemsgetattrrb   rf   r^   )r   resource_attrexternal_resources_r   externalrY   s          r'   _collect_external_resourcesz%Resources._collect_external_resources  s    (*U::@@BHZ[FAs/6sM4/PHSU'99*11(;  V%$66.55a8 &  \ "!r)   c                B    t        | j                  | j                        S rH   )_get_cdn_urlsrW   r   r   s    r'   r   zResources._cdn_urls  s    T\\4==99r)   c                X    t        | j                  | j                  | j                        S rH   )_get_server_urlsr   r   r   r   s    r'   r   zResources._server_urls  s    t}}d>Q>QRRr)   c           	        | j                  |      }g g }}i }| j                  xdk(  r! |D cg c]  }| j                  |       }}nxdk(  r> | j                  xs | j                  }|D cg c]  }t        t        ||             }}nxdk(  r t        t        t
        |            }nxdk(  ri | j                         }t        |j                  | j                  |      |            }|j                  r`|j                  | j                  |      |      }n>dk(  r:| j                         }	t        |	j                  | j                  |      |            }|||fS c c}w c c}w )Nr*   r-   r.   r+   r,   )r   r   _inliner   _default_root_dirrb   r   r^   mapr   r   r   rh   r   )
r   rx   rg   rO   rawrh   rj   r   r+   r,   s
             r'   _resolvezResources._resolve  s+     &sii6;<edt||D)e<==BD,B,BBGH%$WT845%HSe_-nn&SXXd&9&9$&?FG:: ZZ(;(;D(A4HF**,V[[)<)<T)BDIJsF## = Is   E-E"c                    | j                   }d| d}t        | d      5 }|j                         j                  d      }d d d        d| d}| d d| S # 1 sw Y   xY w)Nz	/* BEGIN z */rbutf-8z/* END 
)rc   rR   readdecode)rj   rl   beginrX   middleends         r'   r   zResources._inline  sl    99H:S)$VVX__W-F z%6("SE** s    AA c                X    | j                  d      \  }}}| j                  d      }||z   S )Nr;   r   r   r   r   rO   r   r   s       r'   js_fileszResources.js_files  s3    mmD)q!!==>NO!E))r)   c                    | j                  d      \  }}}| j                  |j                  d| j                   d       | j                  r|j                  d       |S )Nr;   zBokeh.set_log_level("z");zBokeh.settings.dev = true)r   r   rf   r   r   r   r   s      r'   js_rawzResources.js_raw  sT    MM$'	3>>%JJ.t~~.>cBC88JJ23
r)   c                0    | j                  d      \  }}}|S )Nr;   r   )r   r   rh   s      r'   rh   zResources.hashes  s    }}T*1fr)   c                n    t        j                  | j                  | j                  | j                        S )N)r   r   rh   )r   renderr   r   rh   r   s    r'   	render_jszResources.render_js  s&    ""$++VZVaVabbr)   c                X    | j                  d      \  }}}| j                  d      }||z   S )Nr<   r   r   r   s       r'   	css_fileszResources.css_files  s2    mmE*q!!==iH!E))r)   c                0    | j                  d      \  }}}|S )Nr<   r   r   s      r'   css_rawzResources.css_raw  s    MM%(	3
r)   c                f    | j                   D cg c]  }t        j                  |       c}S c c}w rH   )r   rS   dumps)r   r<   s     r'   css_raw_strzResources.css_raw_str  s&    +/<<8<C

3<888s   .c                X    t        j                  | j                  | j                        S )N)r   r   )r   r   r   r   r   s    r'   
render_csszResources.render_css  s    ##DLLDNNSSr)   c                P    | j                         | j                         }}| d| S )Nr   )r   r   )r   r<   r;   s      r'   r   zResources.render  s)    //#T^^%5Rb~r)   rH   )r   zResourcesMode | NonerW   
str | Noner   PathLike | Noner   bool | Noner   r   r   zLogLevel | Noner   r   r   PathVersioner | Nonerw   list[Component] | Noner   r   )rw   r   r|   r   r|   rb   )r   zResourcesLike | Noner|   r   )r|   r   )r   r   r|   None)rx   r{   r|   r:   )rx   r{   r|   z
list[Path])r   ResourceAttrr|   rz   )r|   r   )rx   r{   r|   z#tuple[list[str], list[str], Hashes]rj   r   r|   rb   )r|   rz   )r|   rC   )(r>   r?   r@   __doc__r   oscurdirr   DEFAULT_SERVER_HTTP_URLr   rA   r   r   r   r   r   __str__classmethodr   propertyr   setterr   r   r   r   r   r   r   r~   r   r   r   rh   r   r   r   r   r   r   rB   r)   r'   r   r      s-   .` RYY/
N"" c0O, 
 6}2| &*@\ #$( $%)#/3-1$(@\"@\ 	@\
 "@\ @\ @\ #@\ @\ -@\ +@\ "@\D =A 
/ GA A       * *X"$:S$0 + + * *
 	 	  c * *
   9 9Tr)   r   c                  l    e Zd ZU dZded<   ded<   eddddZedd	       Zedd
       Z	edd       Z
y)SessionCoordinateszN Internal class used to parse kwargs for server URL, app_path, and session_id.rb   _url	ID | None_session_idN)url
session_idc                   || _         | j                   dk(  rt        | _         | j                   j                  d      rt        d      | j                   j	                  d      | _         || _        y )NdefaultwszIurl should be the http or https URL for the server, not the websocket URLr    )r
  r  r   rV   rstripr  )r   r  r  s      r'   r   zSessionCoordinates.__init__  sZ    	99	!/DI99%hiiII$$S)	 &r)   c                    | j                   S rH   )r
  r   s    r'   r  zSessionCoordinates.url-  s    yyr)   c                P    | j                   t               | _         | j                   S )z- Session ID derived from the kwargs provided.)r  r   r   s    r'   r  zSessionCoordinates.session_id1  s'     #24Dr)   c                    | j                   S )a   Session ID provided in kwargs, keeping it None if it hasn't been generated yet.

        The purpose of this is to preserve ``None`` as long as possible... in some cases
        we may never generate the session ID because we generate it on the server.
        )r  r   s    r'   session_id_allowing_nonez+SessionCoordinates.session_id_allowing_none8  s     r)   )r  rb   r  r  r|   r   r   )r|   r   )r|   r  )r>   r?   r@   r   rA   r  r   r  r  r  r  rB   r)   r'   r	  r	    sW    X
I%<VZ &           r)   r	  z^(\d)+\.(\d)+\.(\d)+(\.dev|rc)c                      y)Nzhttps://cdn.bokeh.orgrB   rB   r)   r'   _cdn_base_urlr  H  s    "r)   Tc           
          0t        j                         }|r|nt        j                  d      d    t	               t
        j                         rdndd fddfdt        fd      }t        t        j                  d            d	kD  r1|j                  j                  t        d
d  dt         d             t               r J t               fd|_        |S )N+r   z	bokeh/devzbokeh/releasec                $    |  d rdnd d| S )Nr]   r   r   r\   rB   )r   rx   r   rW   s     r'   mk_filenamez"_get_cdn_urls.<locals>.mk_filenameU  s#    q	H&"!=QtfEEr)   c                (     d d | |      z   S )Nr    rB   )r   rx   base_url	containerr  s     r'   mk_urlz_get_cdn_urls.<locals>.mk_urlX  s"    1YKq)Kd,CCCr)   c                <    | D cg c]  } ||       c}S c c}w rH   rB   rw   rx   r   r   s      r'   r   z_get_cdn_urls.<locals>.<lambda>[  s!    Zd0eZdY	41HZd0e0e   r   r   warnz Requesting CDN BokehJS version 'z"' from local development version 'z6'. This configuration is unsupported and may not work!)rq   rr   c           	     R    | D ci c]  } ||       ||          c}S c c}w rH   rB   )rw   rx   r   r  r   
sri_hashess      r'   r   z_get_cdn_urls.<locals>.<lambda>i  s9    _i2
_iR[F9d#ZIt0L%MM_i2
 2
s   $r   rb   rx   r{   r|   rb   )r   docs_cdnr   rd   r  _DEV_PATmatchr   r`   r   rf   rp   r   rZ   rh   )	rW   r   r)  resultr  r  r  r   r'  s	   ``  @@@@@r'   r   r   L  s    $$&&(K,=,=c,B1,EH'~~g6OIFD efF
;S!"Q&~27);]^i]j kF F 
 	 w"""/8

 Mr)   c                D     |rdndd fdt        fd      S )Nr   r   c                >    | d|   d| } |      } d| S )Nr    r\   zstatic/rB   )r   rx   rj   	_minifiedr   r   s      r'   r   z _get_server_urls.<locals>.mk_urlw  s>    qyk4&1%!$'D74&))r)   c                <    | D cg c]  } ||       c}S c c}w rH   rB   r"  s      r'   r   z"_get_server_urls.<locals>.<lambda>}  s!    Xb.cXb9vi/FXb.c.cr#  r$  r(  )r   )r   r   r   r/  r   s   ` `@@r'   r   r   p  s!    
 #I* cddr)   c                   | j                   dk(  sJ ddlm}m} d|  j	                         } |||      }dj	                         } |||j
                  |      }|j                         \  }}|j                  d      j                         S )	Nz.jsr   )PIPEPopenzopenssl dgst -sha384 -binary )stdoutzopenssl base64 -A)stdinr4  r   )	rk   
subprocessr2  r3  rd   r4  communicater   strip)	rj   r2  r3  digestp1b64p2outr   s	            r'   re   re     s    ;;%&,TF399;F	vd	#B

#
#
%C	s"))D	1B^^FC::g$$&&r)   ResourcesLiker+   r   r*   )CDNINLINEr   rP   rZ   rn   )NNF)r#   r   r$   z
int | Noner%   boolr|   rb   )r|   ztuple[str, ...])rW   rb   r|   rC   )r|   r   r   )NT)rW   r   r   rA  r|   r   )r   rb   r   rA  r   r   r|   r   r   )Rr   
__future__r   logging	getLoggerr>   logrS   r  reos.pathr   pathlibr   typingr   r   r   r	   r
   r   r   r   r   r   core.templatesr   r   
core.typesr   r   modelr   r   r   util.dataclassesr   r   
util.pathsr   
util.tokenr   util.versionr   default_server_hostr!   default_server_portr"   r(   r  r/   rA   r0   r1   	Componentr9   dictrb   rC   rD   rP   rZ   rn   PathVersionerr{   rp   rt   r   r   r   r   r	  compiler*  r  r   r   re   r>  r?  r@  __all__rB   r)   r'   <module>rX     s!  ( # g!  	 	  	 	 	  7 $  ( .   + ) 3h224 2h224 X %, OP) PIJ J#g-y -fg	I  cN	 "%'" ',/$d)KV #${
  
FX FCx C # # #
 23l l\	(  ( \ 2::78#!J ,+/eee )e 
	e '$ %}4y 4U		!r)   