§
    ‰eîiŒ`  ã                   ó�  — d Z ddlmZmZmZmZmZ g d¢Zi ddddgg dœ“d	d
dgg dœ“dddgg dœ“dddgg dœ“ddddgg dœ“dddgg dœ“ddg d¢g dœ“ddg d¢g dœ“dddgg dœ“dd d!gg dœ“d"d#g d$¢g dœ“d%d&g d'¢g dœ“d(d)d*gg dœ“d+d,d+gg dœ“d-d.d-gg dœ“d/d0d/gg dœ“d1d2d1gg dœ“i d3d4d5gg dœ“d6d7d8gg dœ“d9d:g d;¢g dœ“d<d=d<gg dœ“d>d?d>gg dœ“d@dAdBgg dœ“dCdDg dE¢g dœ“dFdGg dH¢g dœ“dIdJddgdd%gdœ“dKdLg g dM¢dœ“dNdOg dP¢g dœ“dQdRg dS¢g dœ“dTdUeg dœ“dVdWeg dœ“dXdYeg dœ“dZd[ed<d>gz   g dœ“d\d]eg dœ“¥i d^d_eg dœ“d`daeg dœ“dbdceg dœ“dddeeg dœ“dfdgeg dœ“dhdieg dœ“djdkeg dœ“dldmeg dœ“dndoeg dp¢z   g dœ“dqdreg dœ“dsdteg dœ“dudveg dœ“dwdxeg dœ“dydzeg dœ“d{d|eg dœ“d}d~g g d¢dœ“¥Zd€e	d�eee	ef                  fd‚„Z
d³d€e	d„ee	         d�ee	         fd…„Zd†ee	         d�ee	         fd‡„Zd�ee	         fdˆ„Zd�ee	e	f         fd‰„Zd�ee	ee	ef         f         fdŠ„Zd�ee	         fd‹„Zd€e	d�efdŒ„Z	 	 d´d€e	d�e	dŽee	         d�ee	         d�dƒf
d�„Zd€e	d�ee	ef         fd‘„Zed’k    �rÜ ed“¦  «          ed”¦  «          ed•¦  «          ed–¦  «          e¦   «                              ¦   «         D ]U\  ZZ ee¦  «        Zed—         rd˜nd™Z edše› d›edœ›d�ed�         › �¦  «          edž eedŸ         ¦  «        › d �¦  «         ŒV ed¡¦  «          ed–¦  «         d¢D ]RZ ee¦  «        Z ed£e› d¤�¦  «          ed¥ ee¦  «        › d¦d§                      ee¦  «        ¦  «        › �¦  «         ŒS ed¨¦  «          ed–¦  «          eg d©¢¦  «        Z  edª¦  «          ed«d§                      ee ¦  «        ¦  «        › �¦  «          ed¬¦  «          ed–¦  «          ed­d®dgddg¬¯¦  «          ed­¦  «        Z! ed°¦  «          ed±e!d�         › �¦  «          ed²d§                     e!dŸ         ¦  «        › �¦  «         dƒS dƒS )µaè  
Toolsets Module

This module provides a flexible system for defining and managing tool aliases/toolsets.
Toolsets allow you to group tools together for specific scenarios and can be composed
from individual tools or other toolsets.

Features:
- Define custom toolsets with specific tools
- Compose toolsets from other toolsets
- Built-in common toolsets for typical use cases
- Easy extension for new toolsets
- Support for dynamic toolset resolution

Usage:
    from toolsets import get_toolset, resolve_toolset, get_all_toolsets
    
    # Get tools for a specific toolset
    tools = get_toolset("research")
    
    # Resolve a toolset to get all tool names (including from composed toolsets)
    all_tools = resolve_toolset("full_stack")
é    )ÚListÚDictÚAnyÚSetÚOptional)&Ú
web_searchÚweb_extractÚterminalÚprocessÚ	read_fileÚ
write_fileÚpatchÚsearch_filesÚvision_analyzeÚimage_generateÚskills_listÚ
skill_viewÚskill_manageÚbrowser_navigateÚbrowser_snapshotÚbrowser_clickÚbrowser_typeÚbrowser_scrollÚbrowser_backÚbrowser_pressÚbrowser_get_imagesÚbrowser_visionÚbrowser_consoleÚbrowser_cdpÚbrowser_dialogÚtext_to_speechÚtodoÚmemoryÚsession_searchÚclarifyÚexecute_codeÚdelegate_taskÚcronjobÚsend_messageÚha_list_entitiesÚha_get_stateÚha_list_servicesÚha_call_serviceÚwebz)Web research and content extraction toolsr   r	   ©ÚdescriptionÚtoolsÚincludesÚsearchz0Web search only (no content extraction/scraping)ÚvisionzImage analysis and vision toolsr   Ú	image_genz"Creative generation tools (images)r   r
   z7Terminal/command execution and process management toolsr   Úmoaz,Advanced reasoning and problem-solving toolsÚmixture_of_agentsÚskillsz\Access, create, edit, and manage skill documents with specialized instructions and knowledge)r   r   r   Úbrowserz|Browser automation for web interaction (navigate, click, type, scroll, iframes, hold-click) with web search for finding URLs)r   r   r   r   r   r   r   r   r   r   r   r    r   r(   zbCronjob management tool - create, list, update, pause, resume, remove, and trigger scheduled tasksÚ	messagingzNCross-platform messaging: send messages to Telegram, Discord, Slack, SMS, etc.r)   ÚrlzFRL training tools for running reinforcement learning on Tinker-Atropos)
Úrl_list_environmentsÚrl_select_environmentÚrl_get_current_configÚrl_edit_configÚrl_start_trainingÚrl_check_statusÚrl_stop_trainingÚrl_get_resultsÚrl_list_runsÚrl_test_inferenceÚfilez_File manipulation tools: read, write, patch (with fuzzy matching), and search (content + files))r   r   r   r   ÚttszVText-to-speech: convert text to audio with Edge TTS (free), ElevenLabs, OpenAI, or xAIr!   r"   z.Task planning and tracking for multi-step workr#   zAPersistent memory across sessions (personal notes + user profile)r$   z7Search and recall past conversations with summarizationr%   zAAsk the user clarifying questions (multiple-choice or open-ended)Úcode_executionzMRun Python scripts that call tools programmatically (reduces LLM round trips)r&   Ú
delegationz:Spawn subagents with isolated context for complex subtasksr'   Úhomeassistantz0Home Assistant smart home control and monitoring)r*   r+   r,   r-   ÚdiscordzSDiscord read and participate tools (fetch messages, search members, create threads)Údiscord_adminzKDiscord server management (list channels/roles, pin messages, assign roles)Ú
feishu_docz!Read Feishu/Lark document contentÚfeishu_doc_readÚfeishu_drivez:Feishu/Lark document comment operations (list, reply, add))Úfeishu_drive_list_commentsÚ!feishu_drive_list_comment_repliesÚfeishu_drive_reply_commentÚfeishu_drive_add_commentÚspotifyzCNative Spotify playback, search, playlist, album, and library tools)Úspotify_playbackÚspotify_devicesÚspotify_queueÚspotify_searchÚspotify_playlistsÚspotify_albumsÚspotify_libraryÚ	debuggingz%Debugging and troubleshooting toolkitÚsafez$Safe toolkit without terminal access)r.   r4   r5   z
hermes-acpum   Editor integration (VS Code, Zed, JetBrains) â€” coding-focused tools without messaging, audio, or clarify UI)r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r"   r#   r$   r&   r'   zhermes-api-serveru|   OpenAI-compatible API server â€” full agent tools accessible via HTTP (no interactive UI tools like clarify or send_message))#r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r"   r#   r$   r&   r'   r(   r*   r+   r,   r-   z
hermes-clizHFull interactive CLI toolset - all default tools plus cronjob managementzhermes-cronzMDefault cron toolset - same core tools as hermes-cli; gated by `hermes tools`úhermes-telegramzPTelegram bot toolset - full access for personal use (terminal has safety checks)úhermes-discordz]Discord bot toolset - full access (terminal has safety checks via dangerous command approval)úhermes-whatsappzMWhatsApp bot toolset - similar to Telegram (personal messaging, more trusted)úhermes-slackzNSlack bot toolset - full access for workspace use (terminal has safety checks)úhermes-signalz?Signal bot toolset - encrypted messaging platform (full access)úhermes-bluebubbleszNBlueBubbles iMessage bot toolset - Apple iMessage via local BlueBubbles serverúhermes-homeassistantzDHome Assistant bot toolset - smart home event monitoring and controlúhermes-emailz>Email bot toolset - interact with Hermes via email (IMAP/SMTP)úhermes-mattermostzAMattermost bot toolset - self-hosted team messaging (full access)úhermes-matrixzDMatrix bot toolset - decentralized encrypted messaging (full access)úhermes-dingtalkzBDingTalk bot toolset - enterprise messaging platform (full access)úhermes-feishuzLFeishu/Lark bot toolset - enterprise messaging via Feishu/Lark (full access))rN   rP   rQ   rR   rS   úhermes-weixinzFWeixin bot toolset - personal WeChat messaging via iLink (full access)úhermes-qqbotzBQQBot toolset - QQ messaging via Official Bot API v2 (full access)úhermes-wecomz=WeCom bot toolset - enterprise WeChat messaging (full access)úhermes-wecom-callbackzJWeCom callback toolset - enterprise self-built app messaging (full access)ú
hermes-smsz7SMS bot toolset - interact with Hermes via SMS (Twilio)úhermes-webhookz=Webhook toolset - receive and process external webhook eventszhermes-gatewayz7Gateway toolset - union of all messaging platform tools)r^   r_   r`   ra   rb   rc   rd   re   rn   rf   rg   rh   ri   rl   rm   rj   rk   ro   ÚnameÚreturnc                 ó¢  — t                                | ¦  «        }|r|S 	 ddlm} n# t          $ r Y dS w xY w| }d| › �}|                     | ¦  «        }| t          ¦   «         vr|}|sdS d| › d�}nGd„ t          ¦   «                              ¦   «         D ¦   «         }|                     | ¦  «        }|rd|› d�}|| 	                    |¦  «        g dœS )	zâ
    Get a toolset definition by name.
    
    Args:
        name (str): Name of the toolset
        
    Returns:
        Dict: Toolset definition with description, tools, and includes
        None: If toolset not found
    r   ©ÚregistryNzPlugin toolset: zMCP server 'z' toolsc                 ó,   — i | ]\  }}|t           v¯||“ŒS © ©ÚTOOLSETS)Ú.0ÚaliasÚ	canonicals      ú*/home/div/.hermes/hermes-agent/toolsets.pyú
<dictcomp>zget_toolset.<locals>.<dictcomp>è  s3   € ð 
ð 
ð 
á ��yØ�HÐ$Ð$ð �uà$Ð$Ð$ó    r/   )
rx   ÚgetÚtools.registryrt   Ú	ExceptionÚget_toolset_alias_targetÚ_get_plugin_toolset_namesÚ_get_registry_toolset_aliasesÚitemsÚget_tool_names_for_toolset)rp   Útoolsetrt   Úregistry_toolsetr0   Úalias_targetÚreverse_aliasesrz   s           r|   Úget_toolsetr‹   Ê  sC  € õ �lŠl˜4Ñ Ô €GØð ØˆðØ+Ð+Ð+Ð+Ð+Ð+Ð+øÝð ð ð Øˆtˆtðøøøð ÐØ+ TÐ+Ð+€KØ×4Ò4°TÑ:Ô:€LàÕ,Ñ.Ô.Ð.Ð.Ø'ÐØð 	Ø�4Ø2 TÐ2Ð2Ð2ˆˆð
ð 
å$AÑ$CÔ$C×$IÒ$IÑ$KÔ$Kð
ñ 
ô 
ˆð
  ×#Ò# DÑ)Ô)ˆØð 	8Ø7¨Ð7Ð7Ð7ˆKð #Ø×4Ò4Ð5EÑFÔFØðð ð s    ' §
5´5NÚvisitedc                 ó0  — |€t          ¦   «         }| dv ret          ¦   «         }t          ¦   «         D ]9}t          ||                     ¦   «         ¦  «        }|                     |¦  «         Œ:t          |¦  «        S | |v rg S |                     | ¦  «         t          | ¦  «        }|sg S t          |                     dg ¦  «        ¦  «        }|                     dg ¦  «        D ]'}t          ||¦  «        }|                     |¦  «         Œ(t          |¦  «        S )aœ  
    Recursively resolve a toolset to get all tool names.
    
    This function handles toolset composition by recursively resolving
    included toolsets and combining all tools.
    
    Args:
        name (str): Name of the toolset to resolve
        visited (Set[str]): Set of already visited toolsets (for cycle detection)
        
    Returns:
        List[str]: List of all tool names in the toolset
    N>   Ú*Úallr1   r2   )	ÚsetÚget_toolset_namesÚresolve_toolsetÚcopyÚupdateÚsortedÚaddr‹   r   )	rp   rŒ   Ú	all_toolsÚtoolset_nameÚresolvedr‡   r1   Úincluded_nameÚincluded_toolss	            r|   r’   r’   ø  s#  € ð €Ý‘%”%ˆð ˆ|ÐÐÝ!™eœeˆ	Ý-Ñ/Ô/ð 	'ð 	'ˆLå& |°W·\²\±^´^ÑDÔDˆHØ×Ò˜XÑ&Ô&Ð&Ð&Ý�iÑ Ô Ð ð
 ˆw€€Øˆ	à‡K‚K�ÑÔÐõ ˜$ÑÔ€GØð Øˆ	õ �—’˜G RÑ(Ô(Ñ)Ô)€Eð
 !Ÿš Z°Ñ4Ô4ð %ð %ˆÝ(¨¸Ñ@Ô@ˆØ�Š�^Ñ$Ô$Ð$Ð$å�%‰=Œ=Ðr~   Útoolset_namesc                 óŽ   — t          ¦   «         }| D ]&}t          |¦  «        }|                     |¦  «         Œ't          |¦  «        S )zç
    Resolve multiple toolsets and combine their tools.
    
    Args:
        toolset_names (List[str]): List of toolset names to resolve
        
    Returns:
        List[str]: Combined list of all tool names (deduplicated)
    )r�   r’   r”   r•   )rœ   r—   rp   r1   s       r|   Úresolve_multiple_toolsetsrž   -  sN   € õ ‘”€Iàð  ð  ˆÝ Ñ%Ô%ˆØ×Ò˜ÑÔÐÐå�)ÑÔÐr~   c                  óˆ   — 	 ddl m}  d„ |                      ¦   «         D ¦   «         S # t          $ r t	          ¦   «         cY S w xY w)uÚ   Return toolset names registered by plugins (from the tool registry).

    These are toolsets that exist in the registry but not in the static
    ``TOOLSETS`` dict â€” i.e. they were added by plugins at load time.
    r   rs   c                 ó$   — h | ]}|t           v¯|’ŒS rv   rw   )ry   r˜   s     r|   ú	<setcomp>z,_get_plugin_toolset_names.<locals>.<setcomp>H  s-   € ð 
ð 
ð 
àØ¥8Ð+Ð+ð à+Ð+Ð+r~   )r€   rt   Úget_registered_toolset_namesr�   r�   rs   s    r|   rƒ   rƒ   @  sp   € ðØ+Ð+Ð+Ð+Ð+Ð+ð
ð 
à (× EÒ EÑ GÔ Gð
ñ 
ô 
ð 	
øõ
 ð ð ð Ý‰uŒuˆˆˆðøøøs   ‚#& ¦AÁ Ac                  ó\   — 	 ddl m}  |                      ¦   «         S # t          $ r i cY S w xY w)z@Return explicit toolset aliases registered in the live registry.r   rs   )r€   rt   Úget_registered_toolset_aliasesr�   rs   s    r|   r„   r„   Q  sO   € ðØ+Ð+Ð+Ð+Ð+Ð+Ø×6Ò6Ñ8Ô8Ð8øÝð ð ð Øˆ	ˆ	ˆ	ðøøøs   ‚ œ+ª+c                  ó   — t          t          ¦  «        } t          ¦   «         }t          ¦   «         D ]L}|}|                     ¦   «         D ]\  }}||k    r|t          vr|} nŒ|| v rŒ6t          |¦  «        }|r|| |<   ŒM| S )z¿
    Get all available toolsets with their definitions.

    Includes both statically-defined toolsets and plugin-registered ones.
    
    Returns:
        Dict: All toolset definitions
    )Údictrx   r„   rƒ   r…   r‹   )ÚresultÚaliasesÚts_nameÚdisplay_namerz   r{   r‡   s          r|   Úget_all_toolsetsr«   Z  s£   € õ •(‰^Œ^€FÝ+Ñ-Ô-€GÝ,Ñ.Ô.ð 
+ð 
+ˆØˆØ '§¢¡¤ð 	ð 	ÑˆE�9Ø˜GÒ#Ð#¨µXÐ(=Ð(=Ø$�Ø�øØ˜6Ð!Ð!ØÝ˜lÑ+Ô+ˆØð 	+Ø#*ˆF�<Ñ øØ€Mr~   c                  óT  — t          t                               ¦   «         ¦  «        } t          ¦   «         }t	          ¦   «         D ]W}|                     ¦   «         D ]+\  }}||k    r |t          vr|                      |¦  «          nŒ,|                      |¦  «         ŒXt          | ¦  «        S )z¬
    Get names of all available toolsets (excluding aliases).

    Includes plugin-registered toolset names.
    
    Returns:
        List[str]: List of toolset names
    )r�   rx   Úkeysr„   rƒ   r…   r–   r•   )Únamesr¨   r©   rz   r{   s        r|   r‘   r‘   s  s¡   € õ •—’‘”Ñ Ô €EÝ+Ñ-Ô-€GÝ,Ñ.Ô.ð ð ˆØ '§¢¡¤ð 	ð 	ÑˆE�9Ø˜GÒ#Ð#¨µXÐ(=Ð(=Ø—	’	˜%Ñ Ô Ð Ø�øà�IŠI�gÑÔÐøÝ�%‰=Œ=Ðr~   c                 óh   — | dv rdS | t           v rdS | t          ¦   «         v rdS | t          ¦   «         v S )zª
    Check if a toolset name is valid.
    
    Args:
        name (str): Toolset name to validate
        
    Returns:
        bool: True if valid, False otherwise
    >   rŽ   r�   T)rx   rƒ   r„   )rp   s    r|   Úvalidate_toolsetr°   Š  sM   € ð ˆ|ÐÐØˆtØ�xÐÐØˆtØÕ(Ñ*Ô*Ð*Ð*ØˆtØÕ0Ñ2Ô2Ð2Ð2r~   r0   r1   r2   c                 ó*   — ||pg |pg dœt           | <   dS )a
  
    Create a custom toolset at runtime.
    
    Args:
        name (str): Name for the new toolset
        description (str): Description of the toolset
        tools (List[str]): Direct tools to include
        includes (List[str]): Other toolsets to include
    r/   Nrw   ©rp   r0   r1   r2   s       r|   Úcreate_custom_toolsetr³   ž  s)   € ð  #Ø�˜"Ø�N ðð …HˆT�N€N€Nr~   c           
      ó¾   — t          | ¦  «        }|sdS t          | ¦  «        }| |d         |d         |d         |t          |¦  «        t          |d         ¦  «        dœS )z½
    Get detailed information about a toolset including resolved tools.
    
    Args:
        name (str): Toolset name
        
    Returns:
        Dict: Detailed toolset information
    Nr0   r1   r2   )rp   r0   Údirect_toolsr2   Úresolved_toolsÚ
tool_countÚis_composite)r‹   r’   ÚlenÚbool)rp   r‡   r¶   s      r|   Úget_toolset_infor»   ¶  su   € õ ˜$ÑÔ€GØð Øˆtå$ TÑ*Ô*€Nð Ø˜}Ô-Ø Ô(Ø˜JÔ'Ø(Ý˜.Ñ)Ô)Ý˜W ZÔ0Ñ1Ô1ðð ð r~   Ú__main__zToolsets System Demoz<============================================================z
Available Toolsets:z(----------------------------------------r¸   z[composite]z[leaf]z  Ú Ú20z - z     Tools: r¶   z totalz
Toolset Resolution Examples:)r.   r
   r]   r\   z
  ú:z    Resolved to z tools: z, z
Multiple Toolset Resolution:)r.   r4   r
   z*  Combining ['web', 'vision', 'terminal']:z    Result: z
Custom Toolset Creation:Ú	my_customz$My custom toolset for specific tasksr²   z  Created 'my_custom' toolset:z    Description: z    Resolved tools: )N)NN)"Ú__doc__Útypingr   r   r   r   r   Ú_HERMES_CORE_TOOLSrx   Ústrr‹   r’   rž   rƒ   r„   r«   r‘   rº   r°   r³   r»   Ú__name__Úprintr…   rp   r‡   ÚinfoÚ	compositer¹   r1   Újoinr•   ÚcombinedÚcustom_inforv   r~   r|   ú<module>rÌ      s  ððð ð0 2Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1ð
 ð  ð  Ð ðJBà	ØBØ Ð.Øðð ðBð ØIØ�Øðð ðBð Ø8Ø"Ð#Øðð ðBð( Ø;Ø"Ð#Øðð ð)Bð4 ØPØ˜iÐ(Øðð ð5Bð@ 
ØEØ%Ð&Øðð ðABðL ØuØ>Ð>Ð>Øðð ðMBðX ð Vð
ð 
ð 
ð ð
ð 
ðYBðp Ø{Ø�Øðð ðqBð| ØgØ Ð!Øðð ð}BðH 	Ø_ð
ð 
ð 
ð ð
ð 
ðIBð` ØxØEÐEÐEØðð ðaBðl 
ØoØ"Ð#Øðð ðmBðx ØGØ�Øðð ðyBðD ØZØ�Øðð ðEBðP ØPØ"Ð#Øðð ðQBð\ ØZØ�Øðð ð]Bð Bðh ØfØ Ð!Øðð ðiBðt ØSØ!Ð"Øðð ðuBðF ØIØ\Ð\Ð\Øðð ðGBðR ØlØ�Øðð ðSBð^ ØdØ!Ð"Øðð ð_Bðj Ø:Ø#Ð$Øðð ðkBðv ØSð
ð 
ð 
ð ðð ðwBðH Ø\ð
ð 
ð 
ð ðð ðIBð` Ø>Ø˜iÐ(Ø˜F�Oðð ðaBðl Ø=ØØ2Ð2Ð2ðð ðmBðF ð Gð
ð 
ð 
ð ð!ð ðGBðl ð Vð
ð 
ð 
ð8 ð=ð ðmBðn ØaØ#Øðð ðoBðz ð gØ#Øð	ð 	ð{BðP ØiØ#Øðð ðQBð\ ØvØ#ØØð'
ñ 
ð ðð ð]Bðn ØfØ#Øðð ðoBð Bð Bðz ØgØ#Øðð ð{BðF	 ØXØ#Øðð ðG	BðR	 ØgØ#Øðð ðS	Bð^	 Ø]Ø#Øðð ð_	Bðj	 ØWØ#Øðð ðk	Bðv	 ØZØ#Øðð ðw	BðB
 Ø]Ø#Øðð ðC
BðN
 Ø[Ø#Øðð ðO
BðZ
 ØeØ#ð '
ð '
ð '
ñ 
ð ð
ð 
ð[
Bðr
 Ø_Ø#Øðð ðs
Bð~
 Ø[Ø#Øðð ð
BðJ ØVØ#Øðð ðKBðV ØcØ#Øðð ðWBðb ØPØ#Øðð ðcBðn ØVØ#Øðð ðoBðz ØPØð `ð  `ð  `ðð ð{Bð B€ðL+�cð +˜h t¨C°¨H¤~Ô6ð +ð +ð +ð +ð\2ð 2˜#ð 2¨¨C¬ð 2¸DÀ¼Ið 2ð 2ð 2ð 2ðj¨T°#¬Yð ¸4À¼9ð ð ð ð ð& 3 s¤8ð ð ð ð ð" t¨C°¨H¤~ð ð ð ð ð˜$˜s D¨¨c¨¤NÐ2Ô3ð ð ð ð ð2˜4 œ9ð ð ð ð ð.3˜3ð 3 4ð 3ð 3ð 3ð 3ð. Øð	ð Ø
ðàðð �Œ9ðð �3Œið	ð
 
ðð ð ð ð0˜3ð  4¨¨S¨¤>ð ð ð ð ð: ˆzÒÑØ	€EÐ
 Ñ!Ô!Ð!Ø	€Eˆ(�O„O€Oà	€EÐ
!Ñ"Ô"Ð"Ø	€Eˆ(�O„O€OØ)Ð)Ñ+Ô+×1Ò1Ñ3Ô3ð Bð B‰ˆˆgØÐ Ñ%Ô%ˆØ%)¨.Ô%9ÐG�M�M¸xˆ	ØˆÐC�9ÐCÐC˜tÐCÐCÐC¨7°=Ô+AÐCÐCÑDÔDÐDØˆÐ@˜S˜S Ð&6Ô!7Ñ8Ô8Ð@Ð@Ð@ÑAÔAÐAÐAà	€EÐ
*Ñ+Ô+Ð+Ø	€Eˆ(�O„O€OØ8ð Qð QˆØ� Ñ%Ô%ˆØˆˆn�TˆnˆnˆnÑÔÐØˆÐO   U¡¤ÐOÐO°T·Y²Y¸v¸vÀe¹}¼}Ñ5MÔ5MÐOÐOÑPÔPÐPÐPà	€EÐ
*Ñ+Ô+Ð+Ø	€Eˆ(�O„O€OØ(Ð(Ð)FÐ)FÐ)FÑGÔG€HØ	€EÐ
6Ñ7Ô7Ð7Ø	€EÐ
6˜Ÿš 6 6¨(Ñ#3Ô#3Ñ4Ô4Ð
6Ð
6Ñ7Ô7Ð7à	€EÐ
&Ñ'Ô'Ð'Ø	€Eˆ(�O„O€OØÐØØ:ØˆnØ˜hÐ'ð	ñ ô ð ð #Ð" ;Ñ/Ô/€KØ	€EÐ
*Ñ+Ô+Ð+Ø	€EÐ
:˜k¨-Ô8Ð
:Ð
:Ñ;Ô;Ð;Ø	€EÐ
K §¢¨;Ð7GÔ+HÑ!IÔ!IÐ
KÐ
KÑLÔLÐLÐLÐLðI Ðr~   