+
    jHàjì.  ã                  ó\  € R t ^ RIHt ^ RIt^ RIt^ RIHt ^ RIHtH	t	H
t
Ht ^ RIHtHt ^ RIHt ^ RIHtHtHt ^ RIHtHtHtHt ]! 4       t]P6                  ! ]4      t]! R	R
4      t]! RR
4      tRt Rt!Rt"R1t#R R lt$R R lt%R R lt&R R lt'R R lt(R R lt)R R lt*]PW                  R4      R2R R ll4       t,]P[                  R 4      R2R! R" ll4       t.R# R$ lt/R% R& lt0R' R( lt1R) R* lt2]P[                  R+4      R2R, R- ll4       t3]P[                  R.4      R2R/ R0 ll4       t4R# )3a  Delegation routing routes: which ``delegation.backend`` runs subagents, and each plugin backend's
routes under ``delegation.backends.<name>``.

The settings shapes are the ones the official advanced-delegation plugin reads (``model_map``:
named model routes; ``profile_routes``: Hermes profiles subagents may run as). Writes replace one
backend's block wholesale through the same profile scope + config lock every config route uses, so
deleting a route really deletes it (``PUT /api/config`` deep-merges and cannot drop a key).
)ÚannotationsN)Úasdict)ÚAnyÚCallableÚMappingÚOptional)Ú	APIRouterÚHTTPException)Úlate)ÚDelegationBackendSelectÚDelegationModelMapUpdateÚDelegationProfileRoutesUpdate)Ú_profile_scopeÚconfig_write_scopeÚis_redacted_credential_previewÚredacted_credential_previewÚload_configzhermes_cli.configÚsave_configÚdefaultÚ	model_mapÚprofile_routesc               ó    € V ^8„  d   QhRRRR/# )é   ÚdetailÚstrÚreturnr	   © )Úformats   "ÚF/home/ubuntu/.hermes/hermes-agent/hermes_cli/web_routers/delegation.pyÚ__annotate__r   %   s   € ÷ 9ñ 9˜ð 9 ñ 9ó    c                ó   € \        R V R7      # )i�  ©Ústatus_coder   )r	   )r   s   &r   Ú_bad_requestr$   %   s   € Ü S°Ô8Ð8r    c               ó    € V ^8„  d   QhRRRR/# )r   Úmessager   r   r	   r   )r   s   "r   r   r   )   s   € ÷ Lñ L˜cð L mñ Lr    c                óV   € \        RRP                  V P                  4       4      R7      # )a  A package-manager-managed install's config.yaml is not ours to write (``save_config`` would skip it and
report nothing): 409 with core's one-line reason, which the page shows as the error. Not 403, which the
Desktop transport reads as an auth rejection and answers with a re-login.i™  Ú r"   )r	   ÚjoinÚsplit)r&   s   &r   Ú_managed_installr+   )   s    € ô  S°·±¸'¿-¹-»/Ó1JÔKÐKr    c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úparentr   Úkeyr   r   Údictr   )r   s   "r   r   r   0   s!   € ÷ 4ñ 4�Sð 4˜sð 4 tñ 4r    c                óˆ   € \        V \        4      '       d   V P                  V4      MR p\        V\        4      '       d   V# / # ©N)Ú
isinstancer   Úgetr/   )r-   r.   Úvalues   && r   Ú_mappingr5   0   s4   € Ü)¨&´'×:Ò:ˆF�J‰J�sŒOÀ€EÜ˜u¤d×+Ò+ˆ5Ð3°Ð3r    c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úconfigr/   r.   r   r   r   )r   s   "r   r   r   5   s!   € ÷ ñ �Tð  ð ¨ñ r    c                ó`   € V P                  V4      p\        V\        4      '       g   / pW V&   V# r1   )r3   r2   r/   )r7   r.   r4   s   && r   Ú_sectionr9   5   s-   € Ø�J‰J�s‹O€EÜ�eœT×"Ò"ØˆØˆs‰Ø€Lr    c               ó   € V ^8„  d   QhRR/# )r   r   úlist[dict[str, Any]]r   )r   s   "r   r   r   =   s   € ÷ Rñ RÐ2ñ Rr    c                 ó¤   € ^ RI Hp  ^ RIHp ^ RIHp V! 4        V ! 4        Uu. uF!  p/ \        V4      CRVP                  V8H  /CNK#  	  up# u upi )zZ``default`` plus every plugin-registered backend of the active profile, with availability.)Úlist_backends)ÚDEFAULT_BACKEND©Údiscover_pluginsÚbuiltin)Úagent.delegation_backendsr=   Úagent.delegation_registryr>   Úhermes_cli.pluginsr@   r   Úname)r=   rA   r@   Úbs       r   Ú_registered_backendsrG   =   sE   € å7ÝDÝ3áÔáANÄÓQÁ¸AÐ7Œv�a‹yÐ7˜) Q§V¡V¨wÑ%6Ô7ÁÑQÐQùÒQs   £'Ac               ó    € V ^8„  d   QhRRRR/# )r   Úoptionsr   r   r;   r   )r   s   "r   r   r   H   s   € ÷ ñ ˜sð Ð';ñ r    c                ó  € \        V \        4      '       g   . # . pV  Fc  p\        V\        4      '       g   K  \        V4      pVP                  R4      '       d   \	        VR,          4      VR&   VP                  V4       Ke  	  V# )zNModel routes as stored, with an ``api_key`` reduced to a display-only preview.Úapi_key)r2   Úlistr/   r3   r   Úappend)rI   ÚoutÚentryÚrows   &   r   Ú_redacted_optionsrQ   H   so   € ä�gœt×$Ò$Øˆ	Ø
€CÛˆÜ˜%¤×&Ò&ÙÜ�5‹kˆØ�7‰7�9×ÒÜ8¸¸Y½ÓHˆC�	‰NØ�
‰
�3Žñ ð €Jr    c               ó   € V ^8„  d   QhRR/# )r   r   ú	list[str]r   )r   s   "r   r   r   W   s   € ÷  ñ  ˜	ñ  r    c                 ó   € ^ RI Hp  V ! 4       # )é    ©Úlist_profile_names)Úhermes_cli.profilesrW   rV   s    r   Ú_profile_namesrY   W   s   € Ý6ÙÓÐr    z/api/delegation/routingc               ó   € V ^8„  d   QhRR/# )r   ÚprofileúOptional[str]r   )r   s   "r   r   r   ]   s   € ÷ *ñ *¨-ñ *r    c              ƒ  óX   a "  € V 3R lp\         P                  ! V4      G Rj  x€L
 #  L5i)a  The profile's delegation backend (``configured``) and, when it cannot run here, why
(``blocked_reason``, ``None`` when it runs: core fails closed, so subagents are refused until it is fixed), the registered
backends, both route blocks and the profiles a profile route may name.c                 ó´  <€ ^ RI Hp Hp \        S	4      ;_uu_ 4        \	        \        4       R4      p\        4       pV! V4      p\	        VR4      p\	        V\        4      \	        V\        4      rvRTRV ! V4      ^,          ;'       g    RRT\        R\        VP                  R4      4      RVP                  R4      ;'       g    R/\        R	VP                  R	4      ;'       g    .  Uu. uF  p\        V\        4      '       g   K  VNK  	  upRVP                  R4      ;'       g    R/R	\        4       /uuRRR4       # u upi   + '       g   i     R# ; i)
rU   )Úbackend_statusÚconfigured_backendÚ
delegationÚbackendsÚ
configuredÚblocked_reasonNrI   r   Úprofiles)rC   r_   r`   r   r5   r   rG   Ú	MODEL_MAPÚPROFILE_ROUTESrQ   r3   r2   r/   rY   )
r_   r`   ra   rb   rc   Úblocksr   ÚroutesÚpr[   s
            €r   Ú_readÚ%get_delegation_routing.<locals>._reada   s#  ø€ ßPÜ˜G×$Õ$Ü!¤+£-°Ó>ˆJÜ+Ó-ˆHÙ+¨JÓ7ˆJÜ˜j¨*Ó5ˆFÜ (¨´Ó ;¼XÀfÌnÓ=]�và˜jØ ¡.°Ó"<¸QÕ"?×"GÐ"GÀ4Ø˜HÜ˜IÔ'8¸¿¹ÀyÓ9QÓ'RØ% y§}¡}°YÓ'?×'GÐ'GÀ4ðIä ¸¿¹ÀJÓ9O×9UÐ9UÐSUÐ9UÓ-mÑ9U°AÔYcÐdeÔgk×Yl¯a¨aÑ9UÑ-mØ!*¨F¯J©J°yÓ,A×,IÐ,IÀTð!KàœNÓ,ð	÷ %Ò$ùò .n÷ %×$Ð$ús6   �B&EÃ EÃ%EÃ*EÄEÄEÄ(EÅEÅE	N)ÚasyncioÚ	to_thread)r[   rk   s   f r   Úget_delegation_routingro   \   s$   øé € õ
ô& ×"Ò" 5Ó)×)Ð)Ñ)ùs   ƒ *£(¤*z/api/delegation/backendc               ó    € V ^8„  d   QhRRRR/# )r   Úbodyr   r[   r\   r   )r   s   "r   r   r   x   s   € ÷ )ñ )Ð*Að )ÈMñ )r    c              ƒ  óì   a aa"  € S P                   ;'       g    RP                  4       P                  4       ;'       g    \        oV VV3R lp\        P
                  ! V4      G Rj  x€L
  RRRS/#  L
5i)z¼Persist ``delegation.backend`` through core's ``set_global_backend``: only ``default`` or a backend
that can run for this profile (core fails closed on any other, refusing every subagent).Ú c                 ó`  <€ ^ RI Hp  ^ RIHp \	        SP
                  ;'       g    S4      ;_uu_ 4        V! 4         V ! S4        RRR4       R#   \         d   p\        \        T4      4      ThRp?i\         d   p\        \        T4      4      ThRp?ii ; i  + '       g   i     R# ; i)rU   )Úset_global_backendr?   N)rB   ru   rD   r@   r   r[   ÚPermissionErrorr+   r   Ú
ValueErrorr$   )ru   r@   Úexcrq   rE   r[   s      €€€r   Ú_runÚ'select_delegation_backend.<locals>._run}   s„   ø€ Ý@Ý7Ü §¡× 7Ð 7°×8Õ8ÙÔð6Ù" 4Õ(÷ 9Ñ8øô #ô :Ü&¤s¨3£xÓ0°cÐ9ûÜô 6Ü"¤3 s£8Ó,°#Ð5ûð6ú÷ 9×8Ð8ús:   µB¾AÁBÁA1Á1BÁ>BÁ?BÂBÂBÂB-	NÚokTÚbackend)r|   ÚstripÚlowerr>   rm   rn   )rq   r[   ry   rE   s   ff @r   Úselect_delegation_backendr   w   sb   úé € ð �L‰L×Ð˜B×%Ñ%Ó'×-Ñ-Ó/×BÐB´?€D÷
6ô ×
Ò
˜DÓ
!×!Ð!Ø�$˜	 4Ð(Ð(ñ "ùs   …9A4¿(A4Á'A2Á(A4c               ó$   € V ^8„  d   QhRRRRRR/# )r   rO   r/   r.   r   r   r   )r   s   "r   r   r   �   s!   € ÷ ;ñ ;�ð ;˜Cð ; Cñ ;r    c                ót   € V P                  V4      p\        V\        4      '       d   VP                  4       # R # )rs   )r3   r2   r   r}   )rO   r.   r4   s   && r   Ú_textr‚   �   s,   € Ø�I‰I�c‹N€EÜ& u¬c×2Ò2ˆ5�;‰;‹=Ð:¸Ð:r    c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r   r\   ÚnamesrS   Úwhatr   r   r   )r   s   "r   r   r   ’   s(   € ÷ ñ ˜Mð °)ð À3ð È=ñ r    c                ó�   € T ;'       g    R P                  4       pV'       d   W19  d   \        RV RV: R24      hT;'       g    R# )rs   zDefault r(   z is not in the list.N)r}   r$   )r   r„   r…   r4   s   &&& r   Ú_check_defaultr‡   ’   sE   € Ø�]ˆ]˜×!Ñ!Ó#€Eß�Ô#Ü˜X d V¨1¨U©IÐ5IÐJÓKÐKØ�=ˆ=�DÐr    c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   ÚindexÚintrO   r/   Ústoredzdict[str, dict]r   zdict[str, Any]r   )r   s   "r   r   r   ™   s(   € ÷ .ñ .˜sð .¨4ð .¸ð .È^ñ .r    c           	     óÒ  € ^ RI Hp ^ RIHpHp ^ RIHpHp \         Uu/ uF"  p\        W4      '       g   K  V\        W4      bK$  	  p	pRV ^,            2p
V	P                  R4      '       g   \        V
 R24      hRV	R,          : 2p
V	P                  R4      '       g   \        V
 R24      hV	P                  R	4      '       g   \        V
 R
24      hV	P                  R4      '       g&   V	P                  R4      '       g   \        V
 R24      h\        VR4      pV'       d3   V! V4      f%   \        V
 RV: RRP                  V4       R24      hW¹R&   \        VR4      pV'       d2    V! V4      pVe   V'       d   WÔ9  d   \        V
 RV: R24      hWÉR&   \        VP                  R4      \        4      '       d   VR,          V	R&   0 \        mRkRkRkRkp\!        W>,
          4       F)  pVP                  V4      RR. / 39  g   K  W,          WŸ&   K+  	  VP                  R4      p\#        V4      '       dW   VP                  \        VR4      4      ;'       g#    VP                  V	R,          4      ;'       g    / pVP                  R4      p\        V\$        4      '       d*   VP'                  4       '       d   VP'                  4       V	R&   V	# u upi   \         d    Rp ELui ; i)rU   )Ú
ROUTE_KEYS)ÚSTATIC_TIERSÚparse_exact_service_tier)ÚVALID_REASONING_EFFORTSÚparse_reasoning_effortzRoute rE   z needs a name.Údescriptionz> needs a description: it is what the agent reads to choose it.Úmodelz needs a model.ÚproviderÚbase_urlz needs a provider.Úreasoning_effortNz: unknown reasoning effort z. Use none or one of: z, Ú.Úservice_tierz: unknown service tier z . Use normal, fast or ultrafast.Úfallback_providersrK   rs   Úoriginal_name)Úagent.delegation_providerr�   Úagent.fast_moderŽ   r�   Úhermes_constantsr�   r‘   Ú_OPTION_TEXT_KEYSr‚   r3   r$   r)   rw   r2   rL   Úsortedr   r   r}   )r‰   rO   r‹   r�   rŽ   r�   r�   r‘   r.   rP   ÚlabelÚeffortÚtierÚparsedÚ	validatedÚfieldÚsources   &&&              r   Ú_clean_model_optionr§   ™   s¶  € Ý4ßFßPå->Ó
TÑ-> cÄ%È×BSÔ!ˆ3”�eÓ!Ò!Ñ->€CÐ
TØ�U˜Q•Y�KÐ €EØ�7‰7�6�?Š?Ü˜e˜W NÐ3Ó4Ð4Ø�S˜•[‘OÐ$€EØ�7‰7�=×!Ò!Ü˜e˜WÐ$bÐcÓdÐdØ�7‰7�7×ÒÜ˜e˜W OÐ4Ó5Ð5Ø�G‰G�J×Ò 3§7¡7¨:×#6Ò#6Ü˜e˜WÐ$6Ð7Ó8Ð8Ü�5Ð,Ó-€FßÙ! &Ó)Ò1Ü % Ð(CÀFÁ:ð N6Ø6:·i±iÐ@WÓ6XÐ5YÐYZð \ó ]ð ]à"(ÐÑÜ�˜Ó'€Dßð	Ù-¨dÓ3ˆFð Š>Ÿf¨Ô)CÜ % Ð(?À¹xÐGgÐhÓiÐiØ"ˆNÑÜ�%—)‘)Ð0Ó1´4×8Ò8Ø$)Ð*>Õ$?ˆÐ Ñ!àiÔ#Ði YÐiÐ0BÐiÀNÐiÐThÐi€IÜ˜
Õ.Ö/ˆØ�9‰9�UÓ D¨"¨b°"Ð#5Ö5Ø�ˆC‹Jñ 0ð �)‰)�IÓ
€CÜ% c×*Ò*ð —‘œE %¨Ó9Ó:×[Ð[¸f¿j¹jÈÈVÍÓ>U×[Ð[ÐY[ˆØ�j‰j˜Ó#ˆÜ�#”s×Ò §	¡	§¢ØŸ™›ˆˆI‰Ø€JùòS Uøô* ô 	Ø‹Fð	ús   ŸK·KÅ(K ËK&Ë%K&c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r[   r\   r|   r   ÚbuildzCallable[[dict], dict]r   r/   r   )r   s   "r   r   r   Ê   s*   € ÷ 
ñ 
 -ð 
¸#ð 
ÐF\ð 
Ðaeñ 
r    c                ó<  € ^ RI HpHp V! 4       '       d   \        V! RV 24      4      h\	        V 4      ;_uu_ 4        \        4       p\        \        VR4      R4      pV! \        Wa4      4      pWvV&   \        V4       VuuRRR4       #   + '       g   i     R# ; i)rU   )Úformat_managed_messageÚ
is_managedzsave delegation.backends.ra   rb   N)	Úhermes_cli.configr«   r¬   r+   r   r   r9   r5   r   )r[   r|   r©   r«   r¬   r7   rh   Úblocks   &&&     r   Ú_write_backend_blockr¯   Ê   s|   € ßDÙ‡|‚|ÜÑ5Ð8QÐRYÐQZÐ6[Ó\Ó]Ð]Ü	˜G×	$Õ	$Ü“ˆÜœ( 6¨<Ó8¸*ÓEˆÙ”h˜vÓ/Ó0ˆØˆw‰Ü�FÔØ÷ 
%×	$×	$Ó	$ús   ½AB
Â
B	z"/api/delegation/backends/model_mapc               ó    € V ^8„  d   QhRRRR/# )r   rq   r   r[   r\   r   )r   s   "r   r   r   Ø   s   € ÷ Fñ FÐ":ð FÀ]ñ Fr    c           	   ƒ  óö   a "  € R V 3R llp\         P                  ! \        S P                  ;'       g    T\        V4      G Rj  x€L
 pRR\        R\        VR,          4      RVP                  R4      //#  L15i)zcReplace ``delegation.backends.model_map`` (``options`` + ``default``) after validating every route.c               ó    € V ^8„  d   QhRRRR/# )r   Úcurrentr/   r   r   )r   s   "r   r   Ú'save_model_routes.<locals>.__annotate__Ú   s   € ÷ ñ ˜ð  ñ r    c           
     ó  <a€ V P                  R 4      ;'       g    .  Uu/ uF(  p\        V\        4      '       g   K  \        VR4      VbK*  	  pp\	        S	P
                  4       UUu. uF  w  r1\        V\        V4      V4      NK  	  pppV Uu. uF  qR,          NK  	  upo\        V3R lS 4       R4      pV'       d   \        RV: R24      hR V/p\        S	P                  SR4      pV'       d   WvR&   V# u upi u uppi u upi )rI   rE   c              3  óX   <"  € T F  pSP                  V4      ^8”  g   K  Vx € K!  	  R# 5i)é   N)Úcount)Ú.0Únr„   s   & €r   Ú	<genexpr>Ú4save_model_routes.<locals>._build.<locals>.<genexpr>Þ   s"   øé € ÐA¡U ¨e¯k©k¸!«n¸qÑ.@Ÿ!š!£Uùs   ƒ* 
*NzTwo routes are named z; route names must be unique.Úrouter   )r3   r2   r/   r‚   Ú	enumeraterI   r§   Únextr$   r‡   r   )
r³   Úor‹   ÚirI   Ú	duplicater®   r   r„   rq   s
   &       @€r   Ú_buildÚ!save_model_routes.<locals>._buildÚ   sô   ù€ Ø/6¯{©{¸9Ó/E×/KÐ/KÈÐ/KÓcÑ/K¨!ÌzÐZ[Ô]a×ObÔ%”%˜˜6Ó" AÒ%Ñ/KˆÐcÜGPÐQU×Q]ÑQ]ÔG^Ô_ÑG^¹t¸qÔ& q¬$¨q«'°6Ö:ÑG^ˆÑ_Ù$+Ó,¡G˜q�6—�¡GÑ,ˆÜÔA¡UÓAÀ4ÓHˆ	ßÜÐ!6°y±mÐC`ÐaÓbÐbØ!*¨GÐ 4ˆÜ  §¡¨u°gÓ>ˆßØ&�)ÑØˆùò dùÛ_ùÚ,s    C;½C;Á(!D ÂDNr{   TrI   r   )rm   rn   r¯   r[   rf   rQ   r3   ©rq   r[   rÃ   r®   s   f&  r   Úsave_model_routesrÆ   ×   sv   øé € ÷ð ô ×#Ò#Ô$8¸$¿,¹,×:QÐ:QÈ'ÔS\Ð^dÓe×e€EØ�$œ	 IÔ/@ÀÀyÕAQÓ/RØ$-¨u¯y©y¸Ó/Cð$Eð Fð Fñ fùs   ƒAA9ÁA7Á2A9z'/api/delegation/backends/profile_routesc               ó    € V ^8„  d   QhRRRR/# )r   rq   r   r[   r\   r   )r   s   "r   r   r   í   s   € ÷ jñ jÐ$Að jÈMñ jr    c           	   ƒ  óä   a "  € R V 3R llp\         P                  ! \        S P                  ;'       g    T\        V4      G Rj  x€L
 pRR\        RVR,          RVP                  R4      //#  L(5i)ztReplace ``delegation.backends.profile_routes`` (``profiles`` + ``default``); every name must be an
existing profile.c               ó    € V ^8„  d   QhRRRR/# )r   Ú_currentr/   r   r   )r   s   "r   r   Ú)save_profile_routes.<locals>.__annotate__ð   s   € ÷ ñ ˜ð  $ñ r    c                ó¼  <€ \        \        4       4      p. p. pS	P                   FŒ  p\        VR 4      pV'       g   \	        R4      hWQ9  d   \	        RV: R24      hWS9   d   \	        RV: R24      hVP                  V4       \        VR4      pTP                  R V/V'       d   RV/M/ C4       KŽ  	  RV/p\        S	P                  VR4      pV'       d   W‡R&   V# )	rE   z%A profile route needs a profile name.zProfile z does not exist.z is listed twice.r’   re   r[   r   )ÚsetrY   re   r‚   r$   rM   r‡   r   )
rÊ   Úknownre   r„   rO   rE   r’   r®   r   rq   s
   &        €r   rÃ   Ú#save_profile_routes.<locals>._buildð   sÞ   ø€ Ü”NÓ$Ó%ˆØ)+ˆØˆØ—]”]ˆEÜ˜ Ó'ˆDßÜ"Ð#JÓKÐKØÔ Ü" X¨d©XÐ5EÐ#FÓGÐGØŒ}Ü" X¨d©XÐ5FÐ#GÓHÐHØ�L‰L˜ÔÜ  }Ó5ˆKØ�O‰O˜V TÐcÏk¨}¸kÑ.JÐ_aÐcÖdñ #ð ",¨XÐ 6ˆÜ  §¡¨u°iÓ@ˆßØ&�)ÑØˆr    Nr{   Tre   r   )rm   rn   r¯   r[   rg   r3   rÅ   s   f&  r   Úsave_profile_routesrÐ   ì   sj   øé € ÷ð ô* ×#Ò#Ô$8¸$¿,¹,×:QÐ:QÈ'ÔSaÐciÓj×j€EØ�$œ¨°U¸:Õ5FÈ	ÐSX×S\ÑS\Ð]fÓSgÐ(hÐiÐiñ kùs   ƒAA0ÁA.Á)A0)rE   r’   r”   r“   r•   Úapi_moder1   )5Ú__doc__Ú
__future__r   rm   ÚloggingÚdataclassesr   Útypingr   r   r   r   Úfastapir   r	   Úhermes_cli.web_depsr
   Úhermes_cli.web_modelsr   r   r   Úhermes_cli.web_routers._commonr   r   r   r   ÚrouterÚ	getLoggerÚ__name__Ú_logr   r   r>   rf   rg   rž   r$   r+   r5   r9   rG   rQ   rY   r3   ro   Úputr   r‚   r‡   r§   r¯   rÆ   rÐ   r   r    r   Ú<module>rà      s2  ðñõ #ã Û Ý ß 3Ó 3ç ,å $ß rÑ r÷ó ñ 
‹€Ø×Ò˜Ó"€á�=Ð"5Ó6€Ù�=Ð"5Ó6€à€Ø€	Ø!€ØXÐ õ9õLõ4õ
õRõõ ð
 ‡�Ð%Ó&ö*ó 'ð*ð4 ‡�Ð%Ó&ö)ó 'ð)õ*;õ
õ.õb
ð ‡�Ð0Ó1öFó 2ðFð( ‡�Ð5Ó6öjó 7òjr    