
    Vhd                        d Z ddlmZ 	 ddlmZ ddlmZ ddlm	Z	 ddlm
Z
 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dgZ G d d      Zd Z G d d      Z e
e       G d d             Zd Zd Zd Z d Z! e
e       G d d              Z" e
e       G d! d"             Z# ee       G d# d$e#             Z$ ee       G d% d&e#             Z%y'# e$ r d ZY w xY w)(zBasic components support
    )defaultdict)notifyc                       y N )argkws     G/home/dcms/DCMS/lib/python3.12/site-packages/zope/interface/registry.pyr   r      s        )AdapterRegistry)implementedBy)implementer)implementer_only)
providedBy)	Interface)ComponentLookupError)IAdapterRegistration)IComponents)IHandlerRegistration)ISpecification) ISubscriptionAdapterRegistration)IUtilityRegistration)
Registered)Unregistered
Componentsc                   $    e Zd Zd Zd Zd Zd Zy)_UnhashableComponentCounterc                 T    |j                         D cg c]  }| c}| _        y c c}w r   )items_data)self	otherdictitems      r
   __init__z$_UnhashableComponentCounter.__init__5   s    '0'89td9
9s   	%c                 >    | j                   D ]  \  }}||k(  s|c S  yNr   )r    )r!   key	componentcounts       r
   __getitem__z'_UnhashableComponentCounter.__getitem__9   s,     $

 	IuC	 r   c                     t        | j                        D ]   \  }}|d   |k(  s||f| j                  |<    y  | j                  j                  ||f       y r&   )	enumerater    append)r!   r(   r)   idatas        r
   __setitem__z'_UnhashableComponentCounter.__setitem__?   sX     , 	GAtAw)# )5 0

1	 	

9e,-r   c                     t        | j                        D ]  \  }}|d   |k(  s| j                  |=  y  t        |      r&   )r,   r    KeyError)r!   r(   r.   r/   s       r
   __delitem__z'_UnhashableComponentCounter.__delitem__F   sE     , 	GAtAw)#JJqM	 y!!r   N)__name__
__module____qualname__r$   r*   r0   r3   r   r   r
   r   r   2   s    :."r   r   c                       t        t              S r   )r   intr   r   r
   _defaultdict_intr9   N   s    sr   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	_UtilityRegistrationsc                 h    t        t              | _        || _        || _        | j                          y r   )r   r9   _cache
_utilities_utility_registrations%_UtilityRegistrations__populate_cache)r!   	utilitiesutility_registrationss      r
   r$   z_UtilityRegistrations.__init__T   s*    !"23#&;#r   c                     t        | j                  j                               D ]  \  \  }}}|d   }| j                  ||       ! y r&   )iterr?   r   $_UtilityRegistrations__cache_utility)r!   p_r/   r(   s        r
   __populate_cachez&_UtilityRegistrations.__populate_cache\   sF    "4#>#>#D#D#FG 	/NVaTQI  I.	/r   c                     	 | j                   |   |xx   dz  cc<   y # t        $ r7 t        | j                   |         x}| j                   |<   ||xx   dz  cc<   Y y w xY w)N   )r=   	TypeErrorr   )r!   providedr(   provs       r
   __cache_utilityz%_UtilityRegistrations.__cache_utilitya   sh    	!KK!),1, 	! ,GH%, D4;;x( Oq O	!s    =AAc                 b    | j                   |   }||   }|dz  }|dk(  r||= |dkD  S |||<   |dkD  S )NrJ   r   )r=   )r!   rL   r(   r)   s       r
   __uncache_utilityz'_UtilityRegistrations.__uncache_utilityl   sV    ;;x( #
A:# qy #(HYqyr   c                 L    	 | j                   |   |   dkD  S # t        $ r Y yw xY w)Nr   F)r=   rK   )r!   rL   r(   s      r
   _is_utility_subscribedz,_UtilityRegistrations._is_utility_subscribed{   s2    	;;x(3a77 		s    	##c                     | j                  ||      }|||f| j                  ||f<   | j                  j                  d|||       |s| j                  j	                  d||       | j                  ||       y Nr   )rR   r?   r>   register	subscriberE   )r!   rL   namer(   infofactory
subscribeds          r
   registerUtilityz%_UtilityRegistrations.registerUtility   s{    009E
 tW$ 	##t	
 	  XtY?OO%%b(I>Xy1r   c                     | j                   ||f= | j                  j                  d||       | j                  ||      }|s| j                  j	                  d||       y y rT   )r?   r>   
unregister&_UtilityRegistrations__uncache_utilityunsubscribe)r!   rL   rW   r(   rZ   s        r
   unregisterUtilityz'_UtilityRegistrations.unregisterUtility   s[    ''4(89""2x6++Hi@
OO''Hi@ r   N)
r4   r5   r6   r$   r@   rE   r^   rR   r[   r`   r   r   r
   r;   r;   R   s&     /
	!2Ar   r;   c                   >    e Zd ZdZd$dZd Z fdZd Zd Ze	d        Z
d Zd	 Z e	d
 d       Z	 	 d%dZ	 	 d&dZd Zd'dZd(dZd Zd Z	 	 d)dZ	 	 d*dZd Zd'dZd(dZ	 	 d'dZd(dZd Z	 	 	 d)dZd Z	 d*dZd Z 	 	 	 d+dZ!d  Z"d,d!Z#d" Z$d-d#Z% xZ&S ).r   Nc                     t        |t              sJ || _        | j                          | j	                          t        |      | _        d | _        y r   )
isinstancestrr4   _init_registries_init_registrationstuple	__bases___v_utility_registrations_cache)r!   rW   basess      r
   r$   zComponents.__init__   sF     $$$$  "u.2+r   c                 P    d| j                   j                   d| j                   dS )N< >)	__class__r4   r!   s    r
   __repr__zComponents.__repr__   s&    4>>**+1T]]O1==r   c                     t         |          }|d   j                         D ci c]  \  }}|j                  d      s|| }}}t	        |      }||d<   t        |      S c c}}w )N   _v_)super
__reduce__r   
startswithlistrg   )r!   	reductionkvfiltered_statero   s        r
   rv   zComponents.__reduce__   ss    
 G&(	 ,5Q<+=+=+? 641a!"e!4 Q$ 6 6O	%	!Y	6s   A"c                 @    t               | _        t               | _        y r   )r   adaptersrA   rp   s    r
   re   zComponents._init_registries   s     ()(*r   c                 <    i | _         i | _        g | _        g | _        y r   )r?   _adapter_registrations_subscription_registrations_handler_registrationsrp   s    r
   rf   zComponents._init_registrations   s"    &(#&(#+-(&(#r   c                     | j                   }|0|j                  | j                  us|j                  | j                  ur't	        | j                  | j                        x}| _         |S r   )ri   r>   rA   r?   r;   )r!   caches     r
   _utility_registrations_cachez'Components._utility_registrations_cache   sf     33MDNN2((0K0KK &NND$?$?ED7
 r   c                 :    | j                   j                  dd      S )Nrh   r   )__dict__getrp   s    r
   	_getBaseszComponents._getBases   s    }}  b11r   c                    t        |D cg c]  }|j                   c}      | j                  _        t        |D cg c]  }|j                   c}      | j                  _        t        |      | j                  d<   y c c}w c c}w )Nrh   )rg   r~   rh   rA   r   )r!   rj   bases      r
   	_setBaseszComponents._setBases   sn    "'&+)-"DMM)- #.#(',*.#DNN*. $/ %*5\k"	)-*.s
   A>Bc                 "    | j                         S r   )r   rp   s    r
   <lambda>zComponents.<lambda>   s    T^^% r   c                 $    | j                  |      S r   )r   )r!   rj   s     r
   r   zComponents.<lambda>   s    DNN51 r   c                 r   |r|rt        d       |       }|t        |      }|dk(  rt        |      }| j                  j	                  ||f      }|!|d d ||fk(  ry | j                  |d   ||       | j                  j                  |||||       |r#t        t        t        | |||||                   y y )N$Can't specify factory and component. rs   r   )rK   _getUtilityProvided_getNamer?   r   r`   r   r[   r   r   UtilityRegistration)r!   r(   rL   rW   rX   eventrY   regs           r
   r[   zComponents.registerUtility   s     FGG	I*95H2:I&D))--x.>??2Aw9d++""3q68T:))99dItW	6 :#(D)T7D  r   c           
      H   |r|rt        d       |       }||t        d      t        |      }| j                  j                  ||f      }|
|	||d   k7  ry||d   }| j                  j                  |||       t        t        t        | |||g|dd                y)Nr   z3Must specify one of component, factory and providedr   FrJ   T)	rK   r   r?   r   r   r`   r   r   r   )r!   r(   rL   rW   rY   olds         r
   r`   zComponents.unregisterUtility  s     FGG	I  !+ , ,*95H))--x.>?Ki3'3q61AI 	));;dI	' 	|hiJ#ab'J
 	 r   c              #      K   t        | j                  j                               D ]  \  \  }}}t        | ||g|   y wr   )rD   r?   r   r   )r!   rL   rW   r/   s       r
   registeredUtilitieszComponents.registeredUtilities$  sK     t2288:;	C ht%dHdBTBB	Cs   A Ac                 >    | j                   j                  d|||      S rT   )rA   lookup)r!   rL   rW   defaults       r
   queryUtilityzComponents.queryUtility)  s    ~~$$R4AAr   c                 \    | j                   j                  d||      }|t        ||      |S rT   )rA   r   r   )r!   rL   rW   utilitys       r
   
getUtilityzComponents.getUtility,  s1    ..''Hd;?&x66r   c              #   X   K   | j                   j                  d|      E d {    y 7 wrT   )rA   	lookupAllr!   	interfaces     r
   getUtilitiesForzComponents.getUtilitiesFor2  s      >>++B	:::s    *(*c                 :    | j                   j                  d|      S rT   )rA   subscriptionsr   s     r
   getAllUtilitiesRegisteredForz'Components.getAllUtilitiesRegisteredFor5  s    ~~++B	::r   c                    |t        |      }t        ||      }|dk(  rt        |      }||f| j                  |||f<   | j                  j                  ||||       |r#t        t        t        | |||||                   y y Nr   )	_getAdapterProvided_getAdapterRequiredr   r   r~   rU   r   r   AdapterRegistrationr!   rY   requiredrL   rW   rX   r   s          r
   registerAdapterzComponents.registerAdapter8  s    *73H&w92:G$D(/ 	##Xx$> 	&x4A:#(HdGT  r   c           
      `   ||t        d      t        |      }||t        d      t        ||      }| j                  j	                  |||f      }|
|	||d   k7  ry| j                  |||f= | j
                  j                  |||       t        t        t        | |||g|              y)N(Must specify one of factory and provided(Must specify one of factory and requiredr   FT)
rK   r   r   r   r   r~   r]   r   r   r   )r!   rY   r   rL   rW   r   s         r
   unregisterAdapterzComponents.unregisterAdapterJ  s      JKK*73H7?FGG&w9))--x4.HIKg1%Q/''8T(BC  8T:|h$EE
 	 r   c           	   #      K   t        | j                  j                               D ]  \  \  }}}\  }}t        | |||||         y wr   )rD   r   r   r   )r!   r   rL   rW   r(   rX   s         r
   registeredAdapterszComponents.registeredAdaptersd  sV     t2288:;	7 'h$):)T%dHh&/7 7	7s   AAc                 >    | j                   j                  ||||      S r   )r~   queryAdapter)r!   objectr   rW   r   s        r
   r   zComponents.queryAdapterj  s    }}))&)T7KKr   c                 ^    | j                   j                  |||      }|t        |||      |S r   )r~   r   r   )r!   r   r   rW   adapters        r
   
getAdapterzComponents.getAdapterm  s3    --,,VYE?&vy$??r   c                 >    | j                   j                  ||||      S r   )r~   queryMultiAdapter)r!   objectsr   rW   r   s        r
   r   zComponents.queryMultiAdapters  s"    }}..Yg/ 	/r   c                 ^    | j                   j                  |||      }|t        |||      |S r   )r~   r   r   )r!   r   r   rW   r   s        r
   getMultiAdapterzComponents.getMultiAdapterx  s3    --11'9dK?&w	4@@r   c              #      K   | j                   j                  t        t        t        |            |      D ]  \  }} || }|||f  y wr   )r~   r   rx   mapr   )r!   r   rL   rW   rY   r   s         r
   getAdapterszComponents.getAdapters~  sU     !]]44Z)*H
 	$MD' w'G"Gm#	$s   AA	Ac                    |rt        d      |t        |      }t        ||      }| j                  j	                  |||||f       | j
                  j                  |||       |r#t        t        t        | |||||                   y y )N'Named subscribers are not yet supported)
rK   r   r   r   r-   r~   rV   r   r   SubscriptionRegistrationr   s          r
   registerSubscriptionAdapterz&Components.registerSubscriptionAdapter  s     EFF*73H&w9((//xw5	
 	(G<:((HdGT  r   c              #   J   K   | j                   D ]  }t        | g|   y wr   )r   r   r!   r/   s     r
   registeredSubscriptionAdaptersz)Components.registeredSubscriptionAdapters  s+     44 	8D*47$77	8   !#c                 t   |rt        d      ||t        d      t        |      }||t        d      t        ||      }|7| j                  D 	cg c]  \  }}}}}	||k(  r||k(  s|||||	f }
}}}}}	n;| j                  D 	cg c]  \  }}}}}	||k(  r
||k(  r||k(  s|||||	f  }
}}}}}	t	        |
      t	        | j                        k(  ry|
| j                  d d  | j
                  j                  |||       t        t        t        | ||||d                   yc c}	}}}}w c c}	}}}}w )Nr   r   r   Fr   T)
rK   r   r   r   lenr~   r_   r   r   r   )r!   rY   r   rL   rW   rrF   nfr.   news              r
   unregisterSubscriptionAdapterz(Components.unregisterSubscriptionAdapter  sl    EFF JKK*73H7?FGG&w9? 66 &1aA=Q(] q!Q? C  66 &1aA=Q(]qG| q!Q? C  s8s4;;<<.1((+!!(Hg>|$h$
 	 1s   D(#D1c                 :    | j                   j                  ||      S r   r~   subscribers)r!   r   rL   s      r
   r   zComponents.subscribers  s    }}(((;;r   c                     |rt        d      t        ||      }| j                  j                  ||||f       | j                  j                  |d |       |r"t        t        t        | ||||                   y y )Nz$Named handlers are not yet supported)	rK   r   r   r-   r~   rV   r   r   HandlerRegistration)r!   rY   r   rW   rX   r   s         r
   registerHandlerzComponents.registerHandler  s~     BCC&w9##**tWd+	
 	$8:#D(D'4H  r   c              #   J   K   | j                   D ]  }t        | g|   y wr   )r   r   r   s     r
   registeredHandlerszComponents.registeredHandlers  s+     // 	3D%d2T22	3r   c                    |rt        d      ||t        d      t        ||      }|.| j                  D cg c]  \  }}}}||k7  r||||f }}}}}n2| j                  D cg c]  \  }}}}||k(  r||k(  s||||f }}}}}t        |      t        | j                        k(  ry|| j                  d d  | j                  j                  |d |       t        t        t        | |||d                   yc c}}}}w c c}}}}w )Nr   r   Fr   T)	rK   r   r   r   r~   r_   r   r   r   )	r!   rY   r   rW   r   r   r   r.   r   s	            r
   unregisterHandlerzComponents.unregisterHandler  s0   EFF7?FGG&w9? 11 #1a8m q!Q< C  11 #1a=Q'\ q!Q< C  s8s46677),##A&!!(D':|hgrB
 	 -s   C;
*D
c                 <    | j                   j                  |d        y r   r   )r!   r   s     r
   handlezComponents.handle  s    !!'40r   c                 0   t        | j                        }| j                  }d}d}d}d}d|j                  vsJ d |_        |r|j
                  }|j                  }	nd x}}		 |j                         D ]`  \  \  }
}\  }}}|j                  d|
|      |k7  r |d|
||       |dz  }n|dz  }|j                  d|
|      |dz  } |	d|
|       \|dz  }b 	 |`|r|s|r|j	                  |       	 ||||dS # |`|r|s|r|j	                  |       w w w xY w)a  
        Emergency maintenance method to rebuild the ``.utilities``
        registry from the local copy maintained in this object, or
        detect the need to do so.

        Most users will never need to call this, but it can be helpful
        in the event of suspected corruption.

        By default, this method only checks for corruption. To make it
        actually rebuild the registry, pass `True` for *rebuild*.

        :param bool rebuild: If set to `True` (not the default),
           this method will actually register and subscribe utilities
           in the registry as needed to synchronize with the local cache.

        :return: A dictionary that's meant as diagnostic data. The keys
           and values may change over time. When called with a false
           *rebuild*, the keys ``"needed_registered"`` and
           ``"needed_subscribed"`` will be non-zero if any corruption was
           detected, but that will not be corrected.

        .. versionadded:: 5.3.0
        r   changedc                      y r   r   )rG   s    r
   r   zAComponents.rebuildUtilityRegistryFromLocalCache.<locals>.<lambda>(      r   c                       y r   r   )argss    r
   r   zAComponents.rebuildUtilityRegistryFromLocalCache.<locals>.<lambda>.  r   r   r   rJ   )needed_registereddid_not_registerneeded_subscribeddid_not_subscribe)
dictr?   rA   r   r   rU   rV   r   
registeredrZ   )r!   rebuildregsutilsr   r   r   r   rU   rV   rL   rW   value_info_factorys                  r
   $rebuildUtilityRegistryFromLocalCachez/Components.rebuildUtilityRegistryFromLocalCache  sf   0 D//0 ...&~~HI#55Hy	%>Bjjl +: 4":5%##B$75@R47%*%$)$##B%8@%*%b(E2%*%+ -1Be$ "3 0!2!2	
 	
	 -1Be$ 2Cws   #A3C8 8D)r   r   )NNr   r   TN)NNr   N)r   N)r   )NNr   r   T)NNNr   )Nr   r   T)NNr   )F)'r4   r5   r6   ri   r$   rq   rv   re   rf   propertyr   r   r   rh   r[   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)ro   s   @r
   r   r      s    &*"3> +)   22 %1I
 CE59: EG"&>C
B;; @D04$ )-=?47L :<"&/
$ FJ24*.*8
 @B(T< +/&(""3 D1A
r   c                 :    	 | j                   S # t        $ r Y yw xY wr   )__component_name__AttributeError)r(   s    r
   r   r   J  s%    +++ s    	c                 f    t        t        |             }t        |      dk(  r|d   S t        d      )NrJ   r   zWThe utility doesn't provide a single interface and no provided interface was specified.)rx   r   r   rK   )r(   rL   s     r
   r   r   Q  s9    Jy)*H
8}{
	3 r   c                 f    t        t        |             }t        |      dk(  r|d   S t        d      )NrJ   r   zaThe adapter factory doesn't implement a single interface and no provided interface was specified.)rx   r   r   rK   )rY   rL   s     r
   r   r   [  s9    M'*+H
8}{
	3 r   c                 ~   |	 | j                   }n t        j                  |      rt        d      g }|D ]d  }|t
        }nHt        j                  |      s3t        |t              rt        |      }nt        dt        |      z        |j                  |       f t        |      S # t        $ r t        d      w xY w)NzoThe adapter factory doesn't have a __component_adapts__ attribute and no required specifications were specifiedzLthe required argument should be a list of interfaces, not a single interfacez?Required specification must be a specification or class, not %r)__component_adapts__r   rK   r   r   r   rc   typer   r-   rg   )rY   r   resultr   s       r
   r   r   e  s    	33H 
	"	"8	,1
 	

 F 9A**1-!T"!!$57;Aw?  	a =1  	J 	s   B' 'B<c                   D    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zy)r   Nc                 X    || _         || _        || _        || _        || _        || _        y r   )registryrL   rW   r(   rX   rY   )r!   r  rL   rW   r(   docrY   s          r
   r$   zUtilityRegistration.__init__  s,      	"	r   c                 "   dj                  | j                  j                  | j                  t	        | j
                  dd       | j                  t	        | j                  dt        | j                              | j                  | j                        S )Nz"{}({!r}, {}, {!r}, {}, {!r}, {!r})r4   )formatro   r4   r  getattrrL   rW   r(   reprrY   rX   rp   s    r
   rq   zUtilityRegistration.__repr__  se    3::NN##MMDMM:t4diiDNNJT^^0DELL$))
 	
r   c                     t        |       S r   idrp   s    r
   __hash__zUtilityRegistration.__hash__      $xr   c                 0    t        |       t        |      k(  S r   r  r!   others     r
   __eq__zUtilityRegistration.__eq__      DzT%[((r   c                 0    t        |       t        |      k7  S r   r  r  s     r
   __ne__zUtilityRegistration.__ne__  r  r   c                 0    t        |       t        |      k  S r   r  r  s     r
   __lt__zUtilityRegistration.__lt__      DzDK''r   c                 0    t        |       t        |      k  S r   r  r  s     r
   __le__zUtilityRegistration.__le__  r  r   c                 0    t        |       t        |      kD  S r   r  r  s     r
   __gt__zUtilityRegistration.__gt__  r  r   c                 0    t        |       t        |      k\  S r   r  r  s     r
   __ge__zUtilityRegistration.__ge__  r  r   r   r4   r5   r6   r$   rq   r  r  r  r  r  r  r  r   r   r
   r   r     s/    
))()()r   r   c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)r   c                 ^    ||||||f\  | _         | _        | _        | _        | _        | _        y r   )r  r   rL   rW   rY   rX   )r!   r  r   rL   rW   r(   r  s          r
   r$   zAdapterRegistration.__init__  s2     x4C?	t}di	tyr   c                    dj                  | j                  j                  | j                  ddj	                  | j
                  D cg c]  }|j                   c}      z   dz   t        | j                  dd       | j                  t        | j                  dt        | j                              | j                        S c c}w )Nz {}({!r}, {}, {}, {!r}, {}, {!r})[, ]r4   )r  ro   r4   r  joinr   r  rL   rW   rY   r  rX   r!   r   s     r
   rq   zAdapterRegistration.__repr__  s    188NN##MM$))?AQZZ?@@3FDMM:t4diiDLL*d4<<.@A499
 	
 @s   B>c                     t        |       S r   r	  rp   s    r
   r  zAdapterRegistration.__hash__  r  r   c                 0    t        |       t        |      k(  S r   r  r  s     r
   r  zAdapterRegistration.__eq__  r  r   c                 0    t        |       t        |      k7  S r   r  r  s     r
   r  zAdapterRegistration.__ne__  r  r   c                 0    t        |       t        |      k  S r   r  r  s     r
   r  zAdapterRegistration.__lt__  r  r   c                 0    t        |       t        |      k  S r   r  r  s     r
   r  zAdapterRegistration.__le__  r  r   c                 0    t        |       t        |      kD  S r   r  r  s     r
   r  zAdapterRegistration.__gt__  r  r   c                 0    t        |       t        |      k\  S r   r  r  s     r
   r  zAdapterRegistration.__ge__  r  r   Nr  r   r   r
   r   r     s0    @

))()()r   r   c                       e Zd Zy)r   N)r4   r5   r6   r   r   r
   r   r     s    r   r   c                   ,    e Zd Zd Zed        ZdZd Zy)r   c                 P    |||||f\  | _         | _        | _        | _        | _        y r   )r  r   rW   handlerrX   )r!   r  r   rW   r1  r  s         r
   r$   zHandlerRegistration.__init__  s)    xw3	ty$,	r   c                     | j                   S r   )r1  rp   s    r
   rY   zHandlerRegistration.factory  s    ||r   Nc                 Z   dj                  | j                  j                  | j                  ddj	                  | j
                  D cg c]  }|j                   c}      z   dz   | j                  t        | j                  dt        | j                              | j                        S c c}w )Nz{}({!r}, {}, {!r}, {}, {!r})r"  r#  r$  r4   )r  ro   r4   r  r%  r   rW   r  rY   r  rX   r&  s     r
   rq   zHandlerRegistration.__repr__  s~    -44NN##MM$))?AQZZ?@@3FIIDLL*d4<<.@A499
 	
 @s   B()r4   r5   r6   r$   r   rY   rL   rq   r   r   r
   r   r     s'    4   H
r   r   N)&__doc__collectionsr   
zope.eventr   ImportErrorzope.interface.adapterr   zope.interface.declarationsr   r   r   r   zope.interface.interfacer   zope.interface.interfacesr   r   r   r   r   r   r   r   r   __all__r   r9   r;   r   r   r   r   r   r   r   r   r   r   r   r
   <module>r=     s?   #!
 3 5 3 8 2 . : : 1 : 4 F : 0 2 	" "8DA DAN [m
 m
 m
`> !"&) &) #&)R !"#) #) ##)L 23	2 	 4	 &'
- 
 (
M  s   C< <DD