From 56f758cc28f724522bae3bcdbf1d1fb1c2873a71 Mon Sep 17 00:00:00 2001
From: Evennia docbuilder action Jul 2, 2025 [Fix][issue3696]: Fix Django version minimum string being too picky, causing
+confusing warning message on startup (Griatch) Jul 1, 2025Table of Contents
+
Changelog¶
+Evennia 5.0.1¶
+
+
+Evennia 5.0.0¶
search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}¶search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}¶
search_index_entry = {'aliases': 'batchcmd batchcommand', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcmd batchcommand', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}¶search_index_entry = {'aliases': 'batchcommand batchcmd', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcommand batchcmd', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}¶
search_index_entry = {'aliases': '@del @delete', 'category': 'building', 'key': '@destroy', 'no_prefix': 'destroy del delete', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}¶search_index_entry = {'aliases': '@delete @del', 'category': 'building', 'key': '@destroy', 'no_prefix': 'destroy delete del', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}¶
aliases = ['@update', '@typeclasses', '@swap', '@parent', '@type']¶aliases = ['@swap', '@parent', '@type', '@typeclasses', '@update']¶
search_index_entry = {'aliases': '@update @typeclasses @swap @parent @type', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass update typeclasses swap parent type', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}¶search_index_entry = {'aliases': '@swap @parent @type @typeclasses @update', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass swap parent type typeclasses update', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}¶
search_index_entry = {'aliases': '@channels @chan', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel channels chan', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶search_index_entry = {'aliases': '@chan @channels', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel chan channels', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶
search_index_entry = {'aliases': '@channels @chan', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel channels chan', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶search_index_entry = {'aliases': '@chan @channels', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel chan channels', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶
search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}¶search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}¶
search_index_entry = {'aliases': 'emote :', 'category': 'general', 'key': 'pose', 'no_prefix': ' emote :', 'tags': '', 'text': "\n strike a pose\n\n Usage:\n pose <pose text>\n pose's <pose text>\n\n Example:\n pose is standing by the wall, smiling.\n -> others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n "}¶search_index_entry = {'aliases': ': emote', 'category': 'general', 'key': 'pose', 'no_prefix': ' : emote', 'tags': '', 'text': "\n strike a pose\n\n Usage:\n pose <pose text>\n pose's <pose text>\n\n Example:\n pose is standing by the wall, smiling.\n -> others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n "}¶
search_index_entry = {'aliases': 'groups hierarchy', 'category': 'general', 'key': 'access', 'no_prefix': ' groups hierarchy', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}¶search_index_entry = {'aliases': 'hierarchy groups', 'category': 'general', 'key': 'access', 'no_prefix': ' hierarchy groups', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}¶
search_index_entry = {'aliases': '@delays @task', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks delays task', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}¶search_index_entry = {'aliases': '@task @delays', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks task delays', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}¶
Test the batch processor.
red_button = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmppnuc2pgs/9024f804f92738f87916c8c35759e3dfd81f7e52/evennia/contrib/tutorials/red_button/red_button.py'>¶
search_index_entry = {'aliases': 'con conn co', 'category': 'general', 'key': 'connect', 'no_prefix': ' con conn co', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶search_index_entry = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co con', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'no_prefix': ' cre cr', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' l look', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}¶search_index_entry = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' look l', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}¶
search_index_entry = {'aliases': 'con conn co', 'category': 'general', 'key': 'connect', 'no_prefix': ' con conn co', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}¶search_index_entry = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co con', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}¶
search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'no_prefix': ' cre cr', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}¶search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}¶
search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' l look', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}¶search_index_entry = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' look l', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}¶
search_index_entry = {'aliases': '@callback @calls @callbacks', 'category': 'building', 'key': '@call', 'no_prefix': 'call callback calls callbacks', 'tags': '', 'text': '\n Command to edit callbacks.\n '}¶search_index_entry = {'aliases': '@callbacks @calls @callback', 'category': 'building', 'key': '@call', 'no_prefix': 'call callbacks calls callback', 'tags': '', 'text': '\n Command to edit callbacks.\n '}¶
aliases = ['manage bugs', 'manage players', 'manage ideas']¶aliases = ['manage ideas', 'manage bugs', 'manage players']¶
search_index_entry = {'aliases': 'manage bugs manage players manage ideas', 'category': 'general', 'key': 'manage reports', 'no_prefix': ' manage bugs manage players manage ideas', 'tags': '', 'text': '\n manage the various reports\n\n Usage:\n manage [report type]\n\n Available report types:\n bugs\n ideas\n players\n\n Initializes a menu for reviewing and changing the status of current reports.\n '}¶search_index_entry = {'aliases': 'manage ideas manage bugs manage players', 'category': 'general', 'key': 'manage reports', 'no_prefix': ' manage ideas manage bugs manage players', 'tags': '', 'text': '\n manage the various reports\n\n Usage:\n manage [report type]\n\n Available report types:\n bugs\n ideas\n players\n\n Initializes a menu for reviewing and changing the status of current reports.\n '}¶
search_index_entry = {'aliases': 'delaliaschan delchanalias', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delaliaschan delchanalias', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}¶search_index_entry = {'aliases': 'delchanalias delaliaschan', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delchanalias delaliaschan', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}¶
search_index_entry = {'aliases': 'q chicken out abort quit', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' q chicken out abort quit', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}¶search_index_entry = {'aliases': 'chicken out quit q abort', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' chicken out quit q abort', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}¶
search_index_entry = {'aliases': 'l ls', 'category': 'evscaperoom', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}¶search_index_entry = {'aliases': 'ls l', 'category': 'evscaperoom', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}¶
search_index_entry = {'aliases': '; whisper shout', 'category': 'general', 'key': 'say', 'no_prefix': ' ; whisper shout', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}¶search_index_entry = {'aliases': '; shout whisper', 'category': 'general', 'key': 'say', 'no_prefix': ' ; shout whisper', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}¶
search_index_entry = {'aliases': 'e ex unfocus examine', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' e ex unfocus examine', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}¶search_index_entry = {'aliases': 'ex e examine unfocus', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' ex e examine unfocus', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}¶
search_index_entry = {'aliases': 'inventory i inv give', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' inventory i inv give', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶search_index_entry = {'aliases': 'inventory inv give i', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' inventory inv give i', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶
aliases = ['achievement', 'achieves', 'achieve']¶aliases = ['achieves', 'achieve', 'achievement']¶
search_index_entry = {'aliases': 'achievement achieves achieve', 'category': 'general', 'key': 'achievements', 'no_prefix': ' achievement achieves achieve', 'tags': '', 'text': '\n view achievements\n\n Usage:\n achievements[/switches] [args]\n\n Switches:\n all View all achievements, including locked ones.\n completed View achievements you\'ve completed.\n progress View achievements you have partially completed\n\n Check your achievement statuses or browse the list. Providing a command argument\n will search all your currently unlocked achievements for matches, and the switches\n will filter the list to something other than "all unlocked". Combining a command\n argument with a switch will search only in that list.\n\n Examples:\n achievements apples\n achievements/all\n achievements/progress rats\n '}¶search_index_entry = {'aliases': 'achieves achieve achievement', 'category': 'general', 'key': 'achievements', 'no_prefix': ' achieves achieve achievement', 'tags': '', 'text': '\n view achievements\n\n Usage:\n achievements[/switches] [args]\n\n Switches:\n all View all achievements, including locked ones.\n completed View achievements you\'ve completed.\n progress View achievements you have partially completed\n\n Check your achievement statuses or browse the list. Providing a command argument\n will search all your currently unlocked achievements for matches, and the switches\n will filter the list to something other than "all unlocked". Combining a command\n argument with a switch will search only in that list.\n\n Examples:\n achievements apples\n achievements/all\n achievements/progress rats\n '}¶
search_index_entry = {'aliases': 'deal offers', 'category': 'trading', 'key': 'status', 'no_prefix': ' deal offers', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}¶search_index_entry = {'aliases': 'offers deal', 'category': 'trading', 'key': 'status', 'no_prefix': ' offers deal', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}¶
search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects in your vicinity.\n '}¶search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects in your vicinity.\n '}¶
search_index_entry = {'aliases': '@dice roll', 'category': 'general', 'key': 'dice', 'no_prefix': ' dice roll', 'tags': '', 'text': "\n roll dice\n\n Usage:\n dice[/switch] <nr>d<sides> [modifier] [success condition]\n\n Switch:\n hidden - tell the room the roll is being done, but don't show the result\n secret - don't inform the room about neither roll nor result\n\n Examples:\n dice 3d6 + 4\n dice 1d100 - 2 < 50\n\n This will roll the given number of dice with given sides and modifiers.\n So e.g. 2d6 + 3 means to 'roll a 6-sided die 2 times and add the result,\n then add 3 to the total'.\n Accepted modifiers are +, -, * and /.\n A success condition is given as normal Python conditionals\n (<,>,<=,>=,==,!=). So e.g. 2d6 + 3 > 10 means that the roll will succeed\n only if the final result is above 8. If a success condition is given, the\n outcome (pass/fail) will be echoed along with how much it succeeded/failed\n with. The hidden/secret switches will hide all or parts of the roll from\n everyone but the person rolling.\n "}¶search_index_entry = {'aliases': 'roll @dice', 'category': 'general', 'key': 'dice', 'no_prefix': ' roll dice', 'tags': '', 'text': "\n roll dice\n\n Usage:\n dice[/switch] <nr>d<sides> [modifier] [success condition]\n\n Switch:\n hidden - tell the room the roll is being done, but don't show the result\n secret - don't inform the room about neither roll nor result\n\n Examples:\n dice 3d6 + 4\n dice 1d100 - 2 < 50\n\n This will roll the given number of dice with given sides and modifiers.\n So e.g. 2d6 + 3 means to 'roll a 6-sided die 2 times and add the result,\n then add 3 to the total'.\n Accepted modifiers are +, -, * and /.\n A success condition is given as normal Python conditionals\n (<,>,<=,>=,==,!=). So e.g. 2d6 + 3 > 10 means that the roll will succeed\n only if the final result is above 8. If a success condition is given, the\n outcome (pass/fail) will be echoed along with how much it succeeded/failed\n with. The hidden/secret switches will hide all or parts of the roll from\n everyone but the person rolling.\n "}¶
search_index_entry = {'aliases': 'recognize forget', 'category': 'general', 'key': 'recog', 'no_prefix': ' recognize forget', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}¶search_index_entry = {'aliases': 'forget recognize', 'category': 'general', 'key': 'recog', 'no_prefix': ' forget recognize', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}¶
search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}¶search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}¶
search_index_entry = {'aliases': 'unwield unwear', 'category': 'general', 'key': 'remove', 'no_prefix': ' unwield unwear', 'tags': '', 'text': '\n Remove a remove a weapon/shield, armor or helmet.\n\n Usage:\n remove <item>\n unwield <item>\n unwear <item>\n\n To remove an item from the backpack, use |wdrop|n instead.\n\n '}¶search_index_entry = {'aliases': 'unwear unwield', 'category': 'general', 'key': 'remove', 'no_prefix': ' unwear unwield', 'tags': '', 'text': '\n Remove a remove a weapon/shield, armor or helmet.\n\n Usage:\n remove <item>\n unwield <item>\n unwear <item>\n\n To remove an item from the backpack, use |wdrop|n instead.\n\n '}¶
aliases = ['press button', 'push', 'press']¶
search_index_entry = {'aliases': 'press button push press', 'category': 'general', 'key': 'push button', 'no_prefix': ' press button push press', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}¶
aliases = ['smash lid', 'smash', 'break lid']¶
search_index_entry = {'aliases': 'smash lid smash break lid', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' smash lid smash break lid', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}¶
aliases = ['press button', 'push', 'press']¶
search_index_entry = {'aliases': 'press button push press', 'category': 'general', 'key': 'push button', 'no_prefix': ' press button push press', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}¶
aliases = ['l', 'get', 'ex', 'listen', 'feel', 'examine']¶
search_index_entry = {'aliases': 'l get ex listen feel examine', 'category': 'general', 'key': 'look', 'no_prefix': ' l get ex listen feel examine', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}¶
search_index_entry = {'aliases': 'shiftroot pull move push', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' shiftroot pull move push', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}¶search_index_entry = {'aliases': 'shiftroot pull push move', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' shiftroot pull push move', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}¶
aliases = ['press button', 'push button', 'button']¶aliases = ['push button', 'press button', 'button']¶
search_index_entry = {'aliases': 'press button push button button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' press button push button button', 'tags': '', 'text': '\n Presses a button.\n '}¶search_index_entry = {'aliases': 'push button press button button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' push button press button button', 'tags': '', 'text': '\n Presses a button.\n '}¶
aliases = ['fight', 'slash', 'thrust', 'chop', 'parry', 'bash', 'kill', 'defend', 'hit', 'pierce', 'stab']¶aliases = ['fight', 'parry', 'defend', 'pierce', 'hit', 'bash', 'chop', 'kill', 'slash', 'stab', 'thrust']¶
search_index_entry = {'aliases': 'fight slash thrust chop parry bash kill defend hit pierce stab', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' fight slash thrust chop parry bash kill defend hit pierce stab', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}¶search_index_entry = {'aliases': 'fight parry defend pierce hit bash chop kill slash stab thrust', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' fight parry defend pierce hit bash chop kill slash stab thrust', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}¶
search_index_entry = {'aliases': 'l ls', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at "details" in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}¶search_index_entry = {'aliases': 'ls l', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at "details" in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}¶
aliases = ['feel around', 'fiddle', 'l', 'feel', 'search']¶aliases = ['search', 'feel around', 'l', 'feel', 'fiddle']¶
search_index_entry = {'aliases': 'feel around fiddle l feel search', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' feel around fiddle l feel search', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}¶search_index_entry = {'aliases': 'search feel around l feel fiddle', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' search feel around l feel fiddle', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}¶
directory = '/tmp/tmpbd5rl6jt/9ac061b1099d03f401b86baedc434c1c9dd01d8d/evennia'¶directory = '/tmp/tmppnuc2pgs/9024f804f92738f87916c8c35759e3dfd81f7e52/evennia'¶
directory = '/tmp/tmpbd5rl6jt/9ac061b1099d03f401b86baedc434c1c9dd01d8d/evennia/game_template'¶directory = '/tmp/tmppnuc2pgs/9024f804f92738f87916c8c35759e3dfd81f7e52/evennia/game_template'¶
aliases = [':UU', ':s', ':dw', ':<', ':i', ':dd', ':fi', ':A', ':f', ':=', ':echo', ':wq', ':S', ':x', ':u', ':', ':w', ':I', ':q!', ':r', ':>', ':h', ':j', ':y', ':::', ':fd', '::', ':q', ':DD', ':p', ':uu', ':!']¶aliases = [':p', ':q', ':i', ':::', ':S', ':wq', ':fd', ':echo', ':uu', ':s', ':>', ':', ':w', ':h', ':DD', ':j', ':I', ':x', ':y', '::', ':fi', ':A', ':u', ':dd', ':!', ':f', ':<', ':q!', ':UU', ':=', ':r', ':dw']¶
search_index_entry = {'aliases': ':UU :s :dw :< :i :dd :fi :A :f := :echo :wq :S :x :u : :w :I :q! :r :> :h :j :y ::: :fd :: :q :DD :p :uu :!', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :UU :s :dw :< :i :dd :fi :A :f := :echo :wq :S :x :u : :w :I :q! :r :> :h :j :y ::: :fd :: :q :DD :p :uu :!', 'tags': '', 'text': '\n Commands for the editor\n '}¶search_index_entry = {'aliases': ':p :q :i ::: :S :wq :fd :echo :uu :s :> : :w :h :DD :j :I :x :y :: :fi :A :u :dd :! :f :< :q! :UU := :r :dw', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :p :q :i ::: :S :wq :fd :echo :uu :s :> : :w :h :DD :j :I :x :y :: :fi :A :u :dd :! :f :< :q! :UU := :r :dw', 'tags': '', 'text': '\n Commands for the editor\n '}¶
aliases = ['y', 'no', 'abort', 'n', '__nomatch_command', 'yes', 'a']¶
search_index_entry = {'aliases': 'y no abort n __nomatch_command yes a', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' y no abort n __nomatch_command yes a', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}¶
aliases = ['q', 't', 'n', 'abort', 'previous', 'end', 'quit', 'p', 'next', 'top', 'a', 'e']¶aliases = ['next', 'q', 'abort', 'e', 'end', 't', 'p', 'n', 'quit', 'top', 'previous', 'a']¶
search_index_entry = {'aliases': 'q t n abort previous end quit p next top a e', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' q t n abort previous end quit p next top a e', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶search_index_entry = {'aliases': 'next q abort e end t p n quit top previous a', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' next q abort e end t p n quit top previous a', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶
This is the manual of Evennia, the open source Python MU* creation system. Use the Search bar on the left to find or discover interesting articles. This manual was last updated outubro 26, 2024, see the Evennia Changelog. Latest released Evennia version is 5.0.0.
This is the manual of Evennia, the open source Python MU* creation system. Use the Search bar on the left to find or discover interesting articles. This manual was last updated outubro 26, 2024, see the Evennia Changelog. Latest released Evennia version is 5.0.1.
Introduction - what is this Evennia thing?
Evennia in Pictures - a visual overview of Evennia
kjZg)NC&uywL%wI{x(2ol^06+Gi$?-qq1?%$i2QaFhUXwGtTlOd=j6|Sescl zH9f&6L&T}3lqjjTAwFO@GI($42--NF>)K~lY4L8hQqcZ8x#mGGi*!-)FTcm3AaHZ7 zt)f{Q^wW78w0IkgN));~XL)B!gH8C|dTW`fs&t3GE8k=)@u2NlO$8V>=GAUjH%8u# z%&LHi=a4iN-;UUqNN`n@EVQu#_3%@XUGKz5;+6V)2M^uC zAuY`)b&Bwt%N RpOXsI*@NSfGBJ#NR75sb2$N8>((}=g^Y2fhhOcO-&u`li z$Gk2C0_%vo_YFFTLjYrJ<1@E%>}j9PWbI@_kl7#c5hq#KjU&|>3E5@a&d>C~-L&bJ zO-FqzkY8Zdh#qlQ^^Vqf#AH`W-t$r?gy3;UcJOccQx9(LBp3aE&cH{SK;#KN3e7WF zkGbX|c6sO|!jfWVdL~rqNx7_~f!E4Sit4^&> 5Byd5@zti=vyxo*1v%-EX zm3^WK$s?JL3gra@?Y~QZ*-SK*R_!?c<*+vmJ xF@KoW&`G z5J^Y%akkDvTQGl7wCPhi8*G=aMllvVR#J&fgE)NRvr{Olqn|q(v!?Ysd!&-Xqa}_= z5G*#^JJ0jT2-r2vER%uRHga{qEG=;T5nvDzg(fWR%QlOj>9nyHZ1uyx>A|KG1z+{| zm@al6D}~Q4hb)wYnSKKw6uZeEIlra}kx`iX skK<;^7N$%NwQ{RaqMoAp( zQ`E5i6hCY9q0iwfyQ@-BaB~9kSr^-cF3C?6WO2a0fbP@!*s(1QQ_Ur^xktOFN1u4| z!^C*c)l+#&+o-yA(;o+BBjxMlp3zm?t)yZ!e3B7ZQ0$qN28A9>l`uFGf}s?5OtDcm zf~>(Bhql*u93&w0fc&paY!Tf7EUw8IAbQ-CQ8a=Rbe?0X2VMQ| -tUxW{(6jE^-kBxHaY=Zn*gV~Tl+N?#g=EckIj)sJML$4>XzH`SXXw|TviTkHB* z6MAk|UNPnfUaLwWbsy8Ju&GygyH{!6EVEM|B*#-#`Bg&0yEe-N6*ioU<#{U*b{f3e zY1wW@Mh)#XHF!_n*s(I}nlB7ouli>Ok~uB`uNMr@LUENYPCed++$2zr#9`f!w(20p zIjCgK(8w(%jTY^dU10*NwvS$A&abw;Y54TbOc_M$g+nOo7j#+`nEQ+*)0YwA5;HA; z`Nv0{MFW;bnWWMB2O?O?b(K7jStn{4(Z%#znFh75mlRNfhBP)-c$e2p0g;K+5YGT) zQ6gp6GqHiKU#*fF->f<@H54nG@II@(0{#jn3sL@6c`m}AqQo6yWDUv14hhfQHR?n) zS?-`ora5qwMi$-drI6QbCAU2g>HHFC7ip_#ruXCyCG<8415RL`QCd}rMU>W6PHFkF zBdpP=1K%^_BQ9;Lc=;-h(BD_i)q)N1U$mQ&cWiLiRwr98dxAzOm+y$NwIcVQWYplk zfh+4kp_Bu`v0geVT2A^d^%E<{c zXNl|MUUer$Kg)m8HNvM(V7)oKo9vfcg+CEb(H>= z0o-9sb=099rAfa~rlf=1MM(^y$(r5-^3)&vNwfg!sX1u&r8rBdBqR9h#$md@^Uj5E zh!#+fSE}9w!=`JSvOBvh-GO;@rK*cCIRm{ktaw<@-UVunN0B^YER)pGxYJyY5<*7Y zARhlSn|dl{fpksU9gpsgc?#6iq9?pBV)(0csOR_=*8P3`di^N9`4h7>KdD()S=~jy zG53Qm1@TfZnD7l^zTp_M^Ww}%t-0)MH}{JNEf0Is+}qfvVxfpb ZZ44wMgx!4P?1zx~6mrTea;@&kUZ~ zlO*klaDnPgJ$X#e_JB24C0ZW =?HcfOIfgn8hMu+IMNRTWJ4pyd3E&Whrr(VUStNj`^Ssocdk-KvvEu5qjD zYDK(y;cqp_Z`S(pYVp|Hvs2!fHGlbX`bWjOzPw3A;qsNfzDG~tVubT%aq;5I*&%eJ z=lvRmN~f0nFXhT>FrViq!BblzmnXPJy3%2;!Qrx<#Bv6w1P_S%$ld_cb!2-Ump>J* z*lk|3bYw@^t7Ys3Dc>+CR`Y6pbm^O}C#YU+(pLX!z4)jZOP^=(1cq#7eCyUezFrCc zvFm(ZR&6)sa+FsT1o?SOY|E?hX+T-MHhI~8O`@=<2Em}VRdfaJTmDF3FTbBxI-ayF zy?<(0c=>Et@W61>I(v8cPdpxrHhWfU<`qww5~80(A?y-npD+MGdaQ$w($trm()4De zVeFSU-s93hIJ V*o7h4Q4lQ4Xi-xeAQUf2!pU)wv70 z%=H=n1crs$DrIW|o*Jvq)GygTTtAAY*D>ag-~N-$@YDPL|K#{T{U9U*qf_2ufM@Yi zOzlf!TNW^t`nzl$9*M7bENg7!ciAdDlED9{&&oO ww3az=^b~HRm^t-1aB3r;IW_ek$Yf4s{|8c;Q+EG>c;=SCfTf+ti5scB zT={$|O!i4vKaCx4=1ENdPdl#6sr1jE0K>_j1*^}W42ORfc>jaFKMM%|!8VHZ-(qHN z emm)-p55vMiv%mA>(fEM~xh%4sTm4R~(A+3|pJ*eDM?9IREyrOi698 zWKx>4|2{zv59HT7N8;^t^&c#)YTT~+V2t+RJQMKgP{CSW$4FjsSlg)Le$BT|=;^BM zONCIU&oZwCsou8|7u74x1RQ|R&ONNNJol|1Nq@n;(LEO77jhmeBhpy<<9r-?_23{A zUF5doEN=E>40a>&eC5(F%|_vxx~;ASxefY2E)g}CMk~a2h*+pr?z10rJ(Bo8OTIf2 z6tmzkJxKl()X5+JhEJ#Tb#GQLKH%B^@pb%o#Sd_eZo8oVZeE)a&7uz+ GY46(^(Lf+eGdSGfB1(a&`m|{fJ@7D3<~4`L)^%l+m*cR7@DB zKQDUp;kJv62Mw26u >>GqUW@oHgz2SmA3SksH=@EM z4I>Aiib3PaBB4Ya#gYyf>#w;_);Gh{N>_s+Yb8tsHXPfLNs#uqE(Em1EGak!PPCUz zhQo~~f=!8ZGY?IX=9QQF$QP|b(`{#)-iaPs@L&sC!i9)<8Lw**j?f5to)I(f=blP^ zcdgB8dVC4hR;Vf*5yvG*B@LqLRfZKinoz|J{>TlG)o66z5kdgb7JWB9!+fC$LD6=| z`-phbghQAD4%|`TDehjc$IK-D2$FsesDys*PVKjT3$1mY+(L~j1)O$Y!-!|c+iWP} z5ma_gP$Hc{Lld-WWE(~8Ee2c^i&H7LNN^U50AHf@6vB9JCYyw`j8fg-suUBw<@L&G zhwz|#T$)*j8XQ0&ckaF-Dd-XrpVvN9e0TG8LKuZRh#gko G!pfY#B$9%#G-IsGl0JBe}Uxkq+qC1RLP1eOT< zrl8G^Yh1pM+n@k` em0wT==%Km6MB+p^3Sbkil~zTp!B=y~`FSswrYdQQs mt_sLFI9j0e9A+MwP zhDqniWVejl)4mUfOFvk|n!5AQ#-zK#MQ>aEgZSp7ED jSDx8=T#$r%p* zv4^4>t9>3Vfyp_q?u+7x&LL`B?CBU8=r>?S&-UW&wV8Hfc%Pj1oz2z$h;?#xAZ-%M z*};}dW~Sj96?uE#I@BR(g7Nq+=ohm&Td@7xL;=E|sSu3dY;(RuGNW O^uU?$TSS^7rTrkm*1y^PuFy>ml(3*(}wKkOj@+hn07nkgJj)6O{vZ z)X$FPG16G|dvHb1hnfmR#q5Y}7N$G~llB5nXbWJi9%L=V2ZQ{--@KEdG^N0YLd175 z?~gjjDm$HyqRZ1qb?()FCcndJtfY^kHe9eLP >MMa&S$?}73N zkg$Yxn8YpRS#7h~uW$I$3tEFjk809yA-g|!gSF6?oqn87>k&r$!^RDnd~Kcs3zjr< zn81&k*txZhH52k$gMAPgO3fzHL)AIy( #2!r=RORA5 Nem(Q89XzhpV zJ8tiKMr_(e)4FcCblu?O@U;f;3yDl~^jvkIAX4m-cx+m*Mn!Q0q9k6?U*t3UZ$zTT zVaS=byC+x(3BriXs5nu*PqlEnaM8j*#t`JOWO{?3h1Bv$NkXCKUm2vS!wumb#8*&~ zdU$^aC<=MX?^HF-U#vQ@M1LOJ8ix-Nbgy5dTBgtJ61MkcWB(^GE5M%^RP7(gh{ut` z+gYCf_F?yS&b|(RGn~1Kn}dAr>Mx=!d0#7oN?WmzI{;)EEibVBtLf{W0#ncEmEmAy zE%v1vbyZGD9M87zn+#s0^FqNX$1q(bFLpZxTXcWtBgk|d(i~rOloa+&W27-Sew`>* z<4%4;d#tMIqmbm!askW?+eg2`^O9<4R2P(7DYj6xTUJS+hArPtk 8-RYLU6oz6;O3^!>s|dX zSNf5EFY}upx2wy)EIzP)tuE_po8RjBF-qDlFTDBRz$pev@~jrRZA >bTBe0pjBB_ tSrY0~TUcYQ5|4Dpkx^F)D7`5r9#S{|$X3VSom z#3f0~Hq68%$wXJIC_nPtBwj$LiPh?LgDyY1k6P~_&qI#&3rcYT(rPbCLyRL)L1DzW z=Z>YoG!lUxBysgwgz1P7;s3*ohedISj*4n1pWRf5xE07D%#S5(^&@O{=#cK+i5y2m z98M&chhVwMB;t59!okGYr^CXYo2@)A6II1A Pua3>Gjhyvq3QzSw@XRF4P#Tz^Led`S*d5+n(DK#wrYk#~pA~Uk5(wTH z hn|dzgf|$+4<$-=Ev7gbA$5V=$>#Ft8Mf*72be&E 0h}p;SWPOHUR&6CgNf*N*h4INp|sEV8 3}Bh=W(4rSVmTTi<2W8e7JmgQXr6gIxpBFmuJ zKAbbYd<8EWwN^={+2H!?W}j+yuhF2d#$mPNzu~kDwhX-e3p!2UFm)8|XWpSgNK7(S zWQqWu_in&nG}V$(>5!{NSvH&$B8QA8;w50W0EZycL8I (fsCbK0DZuJn zaho=Q=4L^~CO*D9NC1WRPW`jqA+rCkcydKG#l+$HMJlO8XO !Q{KC<_LLC_WmYv&uP8k5Z z3+?FctAi|RKB_zqHba>4vqskFe`MyYW|8UVk?Qp Ri&b3<)D zuv9$=xQOR`c9Trx7|9J+kmG_&MAwN{WSsF;QlPZl^b-9vvr*_E^=5R)GeybjQ{!r8 zqCGO-w5IqOnxn; @zYs57ud+@|PkLM)gX%VH)j)m KqoHcPM&elN(TfG%Snh> z(%T^F8(Lt`BCO^aCtDcqI>eYX_vfdO{Q2YM5#9@FIK>|=-6~^OWwuhSVZyg5@YznU zMjV@_IgX<685pK-ja{22yY`f%rf-sVnsFQ7;QnAvfX|12CLWSC-gLhm1eh_gig!{>~H!t4;$$%F$K z&%UF=I#*nn0lR~%NrUI%0Uh3QX??@A9r#78UP6b8se3AzNz`VlifMq6I(8C+nafLX zrdy1 E`_=0`3<({(^y3B; cnJv=Uirqo3Wd*=b)>+ z<;%|tZ~yb_TBl%R$!KUIG2M8+lnvthcr?8IdGWU63i> Osk>fTv=Y6g#oxrgkHs%Z6enD^Al#h}Q UHj0f;ON0T7Qlr>W^M3+JM zfu-b_6O$dXteIp>zH|fe4{J`53Y;C!^ !C uuWEgL0@Kfn{$24S?i%42OOR%HS&V~77axcAB)<0rIOg~M8tj=oW zC0A3A^j~Jf1(QCrVa)Hx4LKH5I`w?UQvc!4m;4+B|96ei+F-rdG7n4o$k&3qqPV z%srQm%{C84<_JX>bMxeMwd_H1l t#5W=g5zm 7h)n;yhOn>p_RFBc|~6$n!4BY%T9CTG)lhJURIMCV;=^*$KE&T{ceDid#A&n8an zdAZWwz&<=~J_tm3-^J&?6rq z=#@9X`;J`ecAk${@c3%|xvWFdauHY0TP9 0$Xj(kKb7Qmt_6a7Bp@zB|Q(UaS{qz(1h8e7bC=AD+(Al&~vfOdko zi?Oi3TrIFB;bFYK%ZN-N$-UBu)bh6NE1A1|J@hVJj0AGl7QKj|eSAIK;|0fKKNeiO za~+6o^bzJz9O_4#1|%WFasQPf{WS0z;UeD(;aD()%ppg_zE}haF>gaPvsez>K j!s`0?`ej|BYWd zwk&}_dAb~n*MU3geuv?n_n5Jn-VUk*@#hBGvTRd6X1t5q?ygvJb(^PpMIey=!JOSj zKZ-<{W4V7Tgxw3q%2Zlkc!0AtDRcj+-ebA!hnx_Ea>8Qi?&=drSczl}LD|J47V4ZC zszfrw>!EC)OB@=tT_Pj|!wP}j&O`8>^$=9$(I3#-@tczj`Iy(0uz$EZ^fwV#% #U+pbN^kT=9une53n7lsvdM;!3h3!4u _v9Bsc-BrZjSxKe^-5 wsVQjL!QYNO`iK`d?G%lRZ=;P;T*WDfc6z#_68~4e-}K^YBwnqZP 68xrQYj(Plfs!4S7w=W4{H{*R8svtNF%BZ@o>c`L>kSXg>}0UySG9Ki)m4-&-N= znRx8Cp{@Q&%x)z$Zig0r{FPn >yx^L`*uW+OLck-K?;pQk`A)m+bh5SzGLE_aAOpTOMCPF6q zp2^O7UfJJ$QnKpo>RS?qB??bJy(Mc0`aWMF6lQpjzv=`BC=juN4kIKLu>i8)J6q^` zJ#l=e@p&LH5?FWa(C8q(m|HYvaFv)ec%63rO_uKO&;1h94~BBms_i%C@S1;Y<)pe@ z%f*Nq*!SrNbAAT2vVxtPW|Ob*xSdDXN+;IO@c3OX }N0Fu#MIsx;tLxsgSZ{Mh3MD{nPwm zPhxw)G^VU!;>l&Z@a9A#J3>8vzDtTEgWTFzGKr~Eko2TDNM7nh3>RJ6_a*Ut7r40r z7KU?upBTN!FQy;s3omL7{x_(U=xX_LmYXiNVRr?e41Y+Fb;pfV57SLI@d+MBO0Re=QLjFqi?o3A?g!F@4cGlF4^XP$HXTxeT31H ?Jx-IA0N5n}XD;Wo?_x-B z2L(W{(cX6Y4kN ``uQ5Iko$TAHCD9tF8ZB%34n@wSLiyhLkSlro z!}y&xnDE{Axia{wJ&(Sv55*ns9r2$j^dn4xfhXxk=Sz 5*Q1oAs{Q zK9~8@$!EOKXuW_5{Va*OI>?=JMW%fC72Z^LO@M5n@R5S_;`N=Z(GCTim?ly{J9LOj zT1q0EBq;1>!oMc3hB=;;=vu-I-BjELms01656u`9qSQm%9Qf^`wD aN6y3wLQ2rvKow9FID13?ko6Fo4Jb3G^$X^ZD=In)qps>0{ zJ)jf)D9JBH4IGc$0*6d|yzki|m(g{n*!TT4tqsHXDBHk|-)9y*3j191FV-n}n4xe9 zK}-3aG!oZ{IX-!u$oB=nm#oSV)kxur<$Rpc)SPRs-DlBsyJ0egk<@-Xj70EDyn-O# z*GkBR(8Y%aqLE@6g95JJl|~~~45%aO&hsbAIWbTCFbNIkwb-SB&2NZkKGgM(>b4!< zzR3o>+lNy1-(Z#_iE_+e^bfG2b$vgEfrW+T@}4Xt9*r;XzWxaUrf$=CH4KJ=ht=6w zdZ3ooFzNK8+4piyqqkdRlsy?8?DpU?X(nKOORs;y^Ld?U8#QSv{*05+27&2`dwshs zVS5X*iB9p~s493UJxJepRSMi#&5G7kUemV_Z{>0~iNBHC1WL6|OcL9$*<3>F>ZaJf zYH(RDxp6!YWLe?@rh9Bc8-c$AvM^TDtbflhfZaW-i3kt{*E%BpI|+CM>YA W7LLA4@7>W7!E+Y^y9t(I%^ClP&!|9jol=35%-z z80($TyPQjUNo`B_B$1?|xK$gYc8S!G%)miGl7MGlYKa$8pKICwPIrT1n1~WpMtU#Z zudEAXCCmX48^50W>7pn3c46=*V_LA?Gd@E25LT?b2kzgy;3NO*1mb6+UnDyG;1kTw zvhxBd|F&IBWuF< p!4KoCnBYHk^KKAT=aZmgz<0#uaRzjoe958w(!mfTzc<_9@YtCHbsWG2 z m)Kfw5*9FKqrJ&ddfj(tn|d}JGg0hpOZ?YZj_C7y{bzVZ%agbk83^XT zPRv((ddE?L1h3}>ry739x{4Jel>OI(FyJSh+aRIg*Si=VE6ww+UZuhpt>rK|_ =Snk jr`vUHWwD60mAK`yj)pP$7d(Bw14l8>S+UzI;_B z%nCsb$le|zlcg2mO;~l^c5PWc^s_|SorpwLCgS(Avy2Ub`5APFDyCb^YzaRYcKnS- z-d5k4T0s;FZW%d(bXrFVGrajH8ydhrZ#1KVB0f-THwL*UMr(VbVU>`vefiCoZi5M= zFI99)!)N(Z6MN22qElPf2}5mslq$MUp0G`feTpZq$rIJ8VoydHl@#|L2FD}trg|am zTY9nhn|+C;;cj+?_d;P21WB;M)X5AK1ie_F2yRZHI9+ 6 zq1$3U8It4I7QS5`4S(>5_M^e9{=sZ9>;r>nFzeJGva${Q#eU5VB@eAXTIdPu4pB=4 z+a$*D|4aAY>4JZ3EDebiP6m!4w3s2@xq1Pj85B9SO2_r*pe6lXTmkw-JH>io!yq$U zg}~QOnZC}^TCTmz8RRj~+2GPX6V8e<%&b6T ?F-4e8(os^QMfSRQU}Q@UX7UXM6y8M2d4@B?#iEQDu(Af3 z<&m2oSq>L_1@F7O)JjmW+|tyQqSow65avZ(X2Z?xtk%fwHgQZS|6-#fbvY#=;#T=~ zs#AM^Qrp>@pze)Z2av=vJ&=Ly{+xpBC#zw~{8O2K19c;~-TI8kYA2IVRv$|9TOU^+ zUQrt(lHS=-IkzBgiJ#t+`k8d-mDX$Tdls3!*q3C!J#CbJ><3eY$~)Q$`n`UIo|hEc z&5Lzi9lLDs$6REXo``$2=TuUVn%%t`~%MU3EnN6(_A!|l=-f)m@jw;jgfd|rymAjz>w zKAMmnC2=Qf%*s=!7!Zq4)lBYr3Yb@o2C6Jg(z3$=x#oVWPehr_@~x}7`uy~$&3$yO zMSAe}tkw&zfQxADSk=np%rKmTBtQDqZZ+aWG|G(0_o>I6DLaOf4qX!#IzKOa4%s{B zMe!iBL$~WnDL!?mt{sXrTbDTbYcuYVnlBV&%}n2Rn0{%d#1oV#r1g4Qw++o-liSvt zGZ#YqzP(Au3wfnO&YD52ZP_HnHgP;TP=?HP6h)l(0eWxjlUt~bLvLhRN6Yh3Y-2uB zUEHl?qV%R|AZdyl{v5`sktwGrO&8z0~6WoHF+F@QQZxuwS2_{rUI& z3xpy;1Z2Sn5PmB*Ty%@=H(Y}j!*Fs%73(zK@)v$&&(}iTg!9q#7H=84oZsy7>Wesw zVR;?m4GI`e9r> bH#OogE0^ud6}w|7`Po znIAlPk7DhFeU$V%BK>g^iJ@#X3|DEaT%OG9CQKta 6aY0~9KN{D7<0PM^qs#qd*_fp>Y zST&oH1-UDjh*WhcM#WJ5u;5*HJw%$eTsU>JnLrw*`Df1Jmx<#W-SBNID?f7PC$+F{ z#a~KEX~k@+iAg0wrVn*v_{sj+fSc_QvX<{p-7~~T=8CLjVWcrSlm;1c7#Ppwa~wx? zsr)ibF&>{GdxTR_>ETIdoVbabvQ#b{k59&+V1ya-dz%sP*TywN?m~-PTp8b-?RWR8 z=)_D~zy5y^&Vdt>7K^(n(S1Bksi+R&)9JSZa2?_XbX?zjV_WyTZ7^>{04=KqJ@Z{W z_^tivf|QBXG(5+MDPxtdyV#*dLemo()ea=0=_2p {+Pvm-TbLH-|D|n zk&7h4`g+b_E@D_kRO!w_0H&lQDOCBY5*4JL7GEfRzW(Yo-A$9Sf=?*CKwnGENW&J% zYF)< E#gO`CM8hdox zw&g7iz`0P?apGc~l7$kV;Bu`~kbe7`IQ^aIz|?hVIA@~>CVRN{7C7!`IX~QHQ@>sy zg$3q|m;za~lG~_$MB2a2We?_;u69Ui3rYM2c|8zeX;&_2eNp +!snR6Thf|_ih+k~G#jV2 zK{2+ `aEZ FH}5FY&7h4P2R?!Bmyp%%7pmL(klIskbeHlxiW(RG}<_fRqi0E z)J8iks?wI~I@?-g`NY~4ud^Nb_&9^~0Qev~Mkb7-3z01LRsa$u0h?5Oh?#IC!I#!e zTsI`%BG0=_AEvV2W!c=c^_L;#P{KOojq(SpSe6&%j_F*;R%p-VjIn+l&qns@>ir}F z9dxITF#jsM^R(<^Bfvq^IR1)V%h8rISAy0-Chu%Gtw&y%O|+b7q@0^cpoYhFZ7IR% z)}G9axoDOr0|X*44p+8SNN!5U$CV$PI$N5AnY7#UH6Y0?*DesfxE7s^D`#Q5XGh88 zGN%%#Owxbp7Fhf_OEn=Q4+aQI`+f202iHaJSa3aTLf?32PSq@BFim}%MyzOld=U)D zs&WZK5WuTAc6GV%Y&xoe14H!9XUf-|8Y$>bDHwhe0&t>Fd6jfuOTO3>5yrz&yy(vc zl1)oeg~=(0J2F>>o6yw^^;PodX| cv zit%U#383Jz+vcI?{M0Fsv_=p7s-UV7329fnNxOI+Eu-c$@u!q#D!-^Y9bXIev i3_x>-VON8GK^`Oq*JWr}AXgj>@G+|GL(D19|3=C8b ze@+AXazebjAh(W8=xVcUQ6$v{sF?nYlG1QKp8`o}^DPJ|AXc5pxen5hih8r_LNJtw zEL1pGD^A?EEzin_=?tsY;p+_iStXF{hCh#_I}T|%XJ_XqKAXj$W-Va{`jzQS5I=uk zaa2ZI`G@liJnOz8fTb+w(1>BLkYY9|I?KU*35C!tr&n@|<`RC>u=phg=5!6_RvCUs z3XpcUF1DCKHr?}&z~;20^E&6J CekPRmXV@ws!B& zE8QmByFXHm*uLH|_Kb698guOv76S_qC9Mt%d`{8(bZf=jZcBR3#%a5JFUNwPf)20$ zt@A&RH%-8%D!dL(GmQ}J41rvj3otG|%7xRKs}!yhtR)RA2lnCmA|EFZGG3O3KqsZN zXdVw*n>q3*j`l#Id`9;rRu5I=CW;T}H!Isxfm;yvuv-*MQrj^j{BM?7pK}mim%n&} zeaI7Z9fsQ#-5O(uiLa<2RT8oib2%C}yerFmZ=hUxM2CCe5_iPYYLqlW-Ki9I$-mGq zazUY*P^?w=*U}Q?J(3|nGBKnW@bs1TKIc2pcfUYy%lLSLwFUXGn&MPcMVT~XeO~4z zjq`=xn;hN-FC&tk0{Gj*vRIU8cGV&bAx~QvYBUX4nkGB;Gd~h#vkn~5k7q`*%2x-8 zVV5Si9`>Jltmb2-d@FPjP*nZiMUBOJJ~fT6m48Kd~)ROdnZ)ZfR>3C76Igp zSTZz%m1YFHDBlHpdYp9poCpc1xq+g}B&XabVOq=%cK5$hVNMRJ^u(%bT-21tLmdF6 ztv){}z@li@5wWO1F!7ikI^d0HlOPUY-AkvclXuYLE8d6nYwzA5&aDUrx4;iVP!I{F z9z)#u*vc=_Vt;PEt$pl??jV)W#V^=OO5c?=5`iSNtH-O=9D)tRd=Xkhh#GM`My$H>vm z#nJ0!zW9%zr+6PrS!T&dpT691ENx8zzb&t_Q+hf_)|NMNYAX`JuA>S&?loOg=4a0F zNI?YkdYps@an=1J5CvB~SHR3A@zA#P=U>&K@746NC?a*_g1Js9b#fLy#niz$o#fpA z4^Tj_zp#C41Co5`3f|pL5g50%)PymIUiwmUOqioh18Jd|47%YBC7e(2o8Y!XwEdLw z1e8~?VJ->bpcue!`p&s4@qb_ihwNO# MfDGhb `;~;X!e_04Rw0;7sET!WF?tg@4EO^hqr^j%| zl)On|1-!2Cw5qanDN}9}0?g@2Il7`1g?m`EQTnIusX=HkQ#P-Vc_S)aAPG3wJTnzW zvVc5{`lnsu5P r!^5+`PJiGz391q06KkIY#I>>Z<|2XNKQkUIJkHD%Sj8M=%oNSeJR|+Y z+9?%NQS5AFy*-GCN(fmq{EUc5B0hDwtZ|p(4NgOo|ILuwy0V^!8H4ih?5`P^?*4k? zvf%WO8P&ROKgQIq-K%(g6`BBpg!pBH4@?Fjz< X@A#1{AjQ6d2Dfw`VqrK za2l~h9pd{l _P`d7d694dz9R&EA`?icO}Uy_0i^=km Qdi_w7to3te|l$MhB8FpKK5}7K% z` >2yACL$Z|{88NGYT9NpZcV&H7JSm4BDUJsUL;ZFyBUGo;k ;XvpV ;n17`m5}T^9)pv G*oD9!~Mx|~@z$E4C7&K_21hs13hJUElI`Un744Jtm`eg<51Qw *f$r|Z1zPH{@Ev^XkLqZsU!HKAP_$_QXBX-F z$K=_au1<3}e+|=gXxeD>!ZZuS{uKv@OMlBn2ZNS`2ZyuXIUM&UD+waFa*z2&OsPym z1Ste;*A)jS&qOp|b|p(4)71u>Qd&Q@$vKd2+Myd?;=5!F&^0PISL zlaHpD4M!tMl r@>Z3K=%xYAk#c$=9r!`$+9rjX~l@cUX1`Pj&r@_F){7 znD9>E(}#^+APVPWf&(LUFmtxFMx^Y~m(Vh15D%?q1jgFq>3E6JUiQO`O@BHNksiJT zsubyK_?MZA&gCZOzF8u9b1N|N*>4U+mt-~Pzgd9MKuMz`nQxZsK$W=Euq6ED^QDzoks~|Z0zjwf0Ko!IfbP~!u`{k4GGEpy(GQI@ zTP^h%uE~HS5%Tb#Zm1@a ##6U%_<7&Sa?&^aKkWd zcnFx{vJje$`Kf|n!mMfG9b;mH+Hnp-r`rgDt>19Hs4qN)Onm<|J%27S(WwogZyhB- zoE{*zOj(9{5@<#5_^|_a{gt>H$RYB15T_ym_T6(9KLZ18#W!XBkd>>T u)uP?N z$IoAWy!gDjyS)8$bAM-GR+{o4X04>s1L(38S=VH^H*0^ @)>A7B0GoJaV&dgYCv|5vR1>|hx;N|6fL_fPmMxea2L|S; zh#ljW`%=3Y%o+sqHL1nC*%Ga9ij1Z1)Ncn_AWQ2^TeTjBk?3XBO01(VHdSVPA%^*~ zI!r$_(qud5IV;GbblOUgTD>Jujo1ZuNm?sm5DgD(kAs?qA%FN w#F)<-ZAk5oXRM*c0yIGzaqy0Hzf?K#IlnSj}B15 z!I^Utijkl{q1}|GhKLIMGPavJ0VW%Sur 7wfA3MV7rol3qImHe5&oTd(B9FjLbWg1ZcbSr$=%^k zuW~&r!hf=mUpvw7a$&8frRE)ZfZ_2Je+B&Deqo^!9%@LD;Y}8c(l13>rUkLdU-un3 zVD`|U#{fNz2*1KBXrI7rKRn|L13BvPZ#H$5?s`tX84=Wrr}`ZI6+NUEH=hjs2lM5| zr^wDha(i`mpI}!FjBep0+ZD#R$oN{p@d}5TmVa-2z$3Z-oD(U}NZQ933WZ^GLBhbx zytbqVf7Ws1$b$`e;-tlqZus(3zOa(pbxrZm+wOd;Om+-*IF_Fr#Uqpp;c3+Bp)bl@ zx+;z6tHr(wnZ$o&?)+jkawHBp2aO0oS9J7pTCg&95OS6p5nYHcH@T776&n?Ncsd|V zDSsotxc*=thccTcgB!fCxZjGKIdynKIdMKhfP@BM_kH-vm|erNs7QN Xvw=wDAt`WlzZM30qN zg}5hgcxeptIF#6sY?{kYq=^M({A0vQEs>bJHtJ71Gw6LU$+s4S-u7vW9Fgmbu=xmL z=@t)Sa1TpPDuA_#H;St*S`zsj _-mD#@Ty)#&m`F}`0K9dh4 z3)O{O`+*Bzt!suZvuR~%EED0VnX6COw^@Ztelz6w3lFr~^o4(>IN?$Z2U)|Eyru!A zBBT&ovnRavNfI8d*h@p-J{1 C^wguiH%+sSGEAq;7g zd85hN9e2`61V-@-(Xg^MOMlyB4Qf1OZLtP Nzr^J9zi^kX7P zN2`_Y7M%u01b?-{)ph3!$AbPy|7zi+<35<(2X!PN9Sg#rT8?7pi_JoQx-nvv#bcPd zs=#OZWl^?*4#X2%g#8&h8WUpMZ@2Jp8txaf2RM&LPNI?iLihT*j>rXZNByC1RsF?# z> k|r%2XighBw`M432VEvNrAy`2Y&~TReh>Zs zf-iE9)=v?vdA(s96m+26)Fs;C&d%I|IyJL{-hwaN2caWx$u~f8dT^1P6p^k9w)2%X z0p1QiiGO_OP;NBJV*Qm|xqwZ3{g`ePhBgkuF@e(nW<+MIe*G1WFw{Flj2QP#NuTP5 zS;RwAzqIC3uOasYB%%p<{S*;X$T$>z0vu*1ER>((WI&O!cWq{Asv-#0;J{m!FlV (V3%Vz@R4|3*VDx>%_N0T_Lh^ zoWeN{WNP?Eq0ac~FMAAgEdr3WKGa$m6o1pVY%LY{j4htpp~@UhjRF=JVfdClkVf9q zAU 7q9SiT06okKDtp8!Yc<^ncYC+ d&4e& zgNL)F_U%NcW?GP+z>%C27#!XD6s9s1qK_72UeVfS^g &-R4}Wt^z*P&y z-m_(UUujm>tXmU2(@2e(EC9o{T0(qCpJ-L4sMgdXIe#a&>v!f6&_orJ_$TJhyW)hp zTh!Rp=KfYgOM`!+e_gQrfMrlBYh@WBKYr;-ThsG#W={R RuIb5@a268o8 z$s!*bo3vOigS*vA25S|OcNN5?avB9P#j@PD)+iQ&ChuB^i|Q=#NVle3$DSyzTIC5V z5N27`u#cl?48~hqJh4al7H#WhPYXGHRmVdY50Jqu>>UYmO@a`Rga#S3`|{;SZR3O8 z*@G?gKK_qnZcLgmrGHm|aI`UoP!D95%|jVt!=VjAeuOPsY$Tg;WZ#Rw$5cP?w%5h) zg>lCgFv-3i4@6#e!YRiBO|@&Eoa8vj-Q7=9(S8Tk08vh~Al7!*=8c2_&LDQj-HE=! zeL~xzvO=AUg@w8&e+(FDy4kLGen>PZg-ibL 64M%7Ac71?SQ1s_(M5N8? zfcL)*%G@Yrc-+tkU-sC+w1f^J#zP%moDDHip$($S2!~4;$X&H@L^uR@#cF7M$n66! z^pVW1Xq({Ez< 3Wfq^_gqh?U-D^re7msMY zUzbQ*_Qru!t1Qgis_->~%a`i-nx8^EjjNX03^GqA27?nO$D@V5%OR~o^w9z^9l$Z+ zjsbdfS<}r|f=DYGfQuJ>gNW^dIow>75wlNERxq$NkAIX%3QqX)q-;?)j}Zg~VT&9I zORVk<27f?7c03AX!&2IXMQr%-YQX&2pbY#26eT5w9kpP^_W)J3Xo|8l1U 7E!`{_!s0fQ{?5d>-$mLjANd&e5JMI{%Yx5j{RRncd2^&=oP2wTAh zY~f~t6UGYbl<&==6e(nyNKff(AjD2#od~Z4`DjIwZjL4+K~p;Xzjb9eH9>r6B9fmY z8EGCqG9f9wb3|&!@3rL&|G*N4#-`>Yla%rUOn*?@Xkd-zzl&&FRieR6(I>vJRb;Om zV?0@cCVx@M j9m))^-jFezzvI-MPNSg(u$`Zv}R50 zgc|u^708>2xFO9tc<2(WXS9Jz=n%*|j0w2Gdzi${sYqQt7Ms37#+-GiF_FLIE 53mm^`J7)so@l)FGQd||d>9#;d4Zs~9NcKCZObK&xY0;teQ&p_9GR;w!6=i6& zr}FpQC1EZu75eIcvNRI@Mfr3w!xg|n-+$rQStY^0iJuy_^;3Z>^ Dq|{DIE;7LIXXlEJ<71}6r>Wn9UZI$mt)tb|LV &env9a~ 8kb=S^4SD5J}h z)oz_q5O)sC#3qDK;7-<9e!jU(gu7K4|6Wbez`s8mxQ01QQ9afHY$L&8=6?g9Hb$Q& zKqj(Q{vWe${lqRj)vjVF2j#^PyCs9X^jNN4nv_uNk_so|OTBJ2%ut8u=a OdZ-{06L^=c#=5H@@H6& z&I3p^!r+};f?M*33+DJomjZ3qplU cXp?wEga!~Fe~Y{OJ(orQ<4 z0TaVwg~tB98GbBC7mly_w~ex{U=UL4p0Kp=$x@fnhn ;
E0g7YL`+7O0Da`6SH8yhf-|ur0_=07S@l?x9mo z2LlgDkRRY`n~98-%JbFwsV>$irAyT942{5~w~8^qCd|o07ivA-YYsbALKddR)=ksd z2`zWn@=_W`tbd4ymRfR=8hyiEQ03QaP537W iF8g*SzmUBYKYchQJ0D6K z&M1KvEZJblgPb`&B@#WOX5W!JS#T%e0na&wb%}5-t!P)mliY83KzM%6Jv}si?8`E3 z`v=-8WNq4_U53Xl$n+4hTU|Hg2OJ{dArhE2un^Mo$A2!xc}q)Miy3N;0Y0(@ntcbT zK;k*O71W||Wk>?~w}fn2H(UuW$d-aVs4CRLeJ-N4$M&LzbAs?QaiDS5?=nubfXf&3 zfbhIVcqIR&Z`eU%&t{kxV!E0S_7+O?ZEkC11H0pXWP5=5nc5>^nJFa;29Cw 1X#{gXA~gg9d5$(M8jWxU zC-WH7pi^D9><(JCMROHWK`z-h?v=nMwWlh6gIt3O?h{H{PS}eA6GQa4h4v`|KYkt1 zC)sUypukHl?+reqKHhtMS`FCB3t~OxJSD~;Y=6Oq6p&)=TP|o%h(|#k+SE-kH;1M$ z^k7YLDO@}iA}cY{^V#$CnV{S;hvds(`q)Don8BlGkDkz=ha?YYTCSe2wY{L0+h_V^ zptbHIUY0c--CDaa7KmGUre9_-YMNLAw&*NF4?> hcU)E9bCg_NHuUq~SuOpw{LnFr&>komU_QZ=9EjE6!Y3x=>&;XD=DqjX}E z8MSX2P&pJ)GVit&1(}mwy7QY+j#)>-?0=SCVVYd3%wH?GPG7Wbk3v&a5&d8Ak$fT_ zF3w$3hjI~-8~mROo4%7QEb*;rpg=YQ2z1kza&aZjI*r)N%&yADgYnA7zip7D{p?n| z2Cd+fIC&eD*bAm^yS`h&^Qm4tnj;PV8@%t;pcM8{C0ybLha)B2kp|Qjv8+L|HGge} zs!>^I@RD}7heK97)Jz{}bf`R)=Pn6%ajKwZR{-}Q=%07OIC>!2ASW!TyQqSC7nLoj zYmqs D7mcr@!}aGS<5yd>sJ tg5blw>ZQI5X-4CViNbU4u3I?RUair60=% zMLkCd&Xg!8g24LOoOEzuy(j*Oditn-^h+VQ5uB12nnDgesS27f;BIjO?y7DMh5Qcq zjx^vxSH`2eGKX?3ANobFhE8ELK*$x2^rNPRP|~LTT9hTqQ&QkOIxa TIt@Zv)+xJJ z5!2C19jazQ_C0#&H@m$x6ImFVdF10}pZx8P>{{pW2}f|iD*DE>Ou`Y^Gvsi_sY7@) z*=6e|w(|zFmgkn5DHovj=zq$3h2g^U<^TN0f6?#>4gb%7{2#X82Q#L>-6cx=tZ~Ze zPt2pxq*9uMM8ya0&}={zd4-EjZno4kiKl%CMOi!074ap 09KtKXj7NkgI**Ud5v<7CtdJ-C+RBatABmZSyN;_JKuuL zi9?hj{-p1rZvYPd4h3l}!jxe$Ua3ItMVBR!@w5douxW+iR4}ZPfTP(K1m_Pak%HG) z9RF%20(FR8MMxns_l9=Bo6;bDOPv#NPRKkRoXuKzRS7|A?`5vGIBC<*^yMc@y^z8& zn~TH&Y)|L>;V8rCS$`IV_H7X4Z&CRS;l~P?ab{~4P>d$p1T=0VR-a2+6FTXNmM&AD zvm7_%9hd>KX6g`*8`8Ys4pvk;zfegm+K*@y(Gbc {xGD?Kw8ATj!v4a(rj)B@@Q>DA7qO99`_q2CLNPi{M0K6wI$&GMvDuG5Z z4WO4rL*gBjha=8;dB`3zYU;dS&tsKjKS>`>)@}AxF}!;~a@(M;iQizwSMqbJNXImN ziyr$jH9kh`P)-l>g$#$NYtl+j)mjx|FUFAp^2U9*XQInQ{)RnM2V?4u_F&IQ191mD zlzI>p_r^73WPbq~_l~#D=0y(48W`r37^<2gAwR{oBZf-h*$PB&_QFh$_R{2KM>vD! zi0wq1Fm&-|8wpHa$ru7BbX-8{CJyWoGr#eyMrkhi-ZXrjP$BN%Q*Wn)s(5G)lG}%T zrr6G6m*vSVMn1LliM(&;K4tdl-p6bqox_wdqz6+j>r9Rq xI4kA6my@00th>zmIP_gBgP zy84g1zkfRP;6}B=$b}TQ!sVjj2DHLxgcP^9<)ZPKB9Az%>qZ};=r(QtU@ea#6nk2h ze_HU^oe2rttgs3%iTM%*G 2>liVN-TK=!dC6K8IcfxZ^X6 zU+|Zg0$v4OM{F zXveJl_$agimsCxIFlELFGg2j_aBDOODcck7fTMpp?ttTeQ*N(Pts%7*>Yq?nc28iV z%zs*-hhVfY({C_IXM?2XLde%c=GyWYQOJV+Y(8l;CbFi_r;0Sr*V!(8U$n5wU`?lK zaBiCoE^cFI9|p4j+pdcu-C{@Bf)X!}(C6rI!`MBhe@Vr4uU3Rg(YF4raFtDing_F9 z++BY9lwkSf53n;P_DLB)^2_~)^e@Q(kbm${2?hA0Z}QMf@jx^$qJw;J&Uj9ZP0W+| z@n3z31KK?kdB`@KUI{oR=64~`q=SqAR-%k|0QCxZE>@b@g*YEom}7pk@17i^S|z0V z{23e8B^<@D>!l#1_kCA4MOI>+v$Edw$e(>G%XiM{7kO_4s+w+w??NI*KIk=MK7WvS zDR3Lg9Yu}y%N47}zDyVFA~Zko3Bka$0C5z-X2unsoQK1JxPClj>#xg1YYcjkP?v R^{DOXT@o2*e{!?vuA*MuHj=f2o^%kyv;#!7T*{CUSyYVrRh; z9&BD*x#MH@_eEkP@Nk{@d%{B{AAim+&i?((Tg9sqJv%SnJ7n3Nw&a zG_l$gT22HwsfW+Z_zs0mIdn=5LLE}tl}Pw9#f&R|UUiq@Sua#N*z-HA0UE{8&LCcL zCEifOVPi44X_Dh4c8buqqT^3OFOpvdWU<=>&ir}ldHErXTS5~8dpK;gi+_PzJbz6q zgz`mV;=?1%YQk I7-e z@{%?1)>GP`P1cZxu|?~iSbs4NP>}Z?7PO1x*NfYqKmGhMxxM;$ar+*A-CbS&a{KB2 zKYTPDuIG^61x#nPGgQ>VNEdwu*BMGJpwLvA07b~LYB;wVG&R+zGXY{sk(1eQ2G%uO z9aN)B3~kr+YnbPgR{gnNXAgauH8TpC1COp_2yfCq4Bj64LiAQ7;eW$*BS}VO2N+LI zXb4+6$paf}TjX&$$Do29>XQ4=DdOPcsUR6Nu{jVl>K> jIb#NqqNk9E-pL`MsqQqZttsmtFU1#a#gDamcB1Mn6*N^fOu|Dw-@79s_ zXwIN}`~aQ`G(3SvntwOXLA9b9&6EY|i33om$_hnzoyk!(qj@7z@ShJu(Pj^{Ht}|+ zg-iGF_U;U38`^vBNp3)}G|9RIJUuk!W_IaI?A!X87LNHP%msMGtoPEV-Kjq=bpa)g zGvF!iwrE?An==+QWe~2K Z3;X;9Zo(5xI+luvW9jDzI{~SX4|OUH0VmbP7&yoF+vGbaAYP+$B%{s1rr77 zbx1JtjN68=iGR3kb!Gs#CpRd;Of>oSRN;_`)kyxHCxY)(ioDOzppvdS&TJ=iAor4+ ze~U18VO6%%&!m6xUlJWN&mU%MQDjX5hS$TZ1BcBm4LHLS27xn6a@F*qq+2sX%O9+l z0q1YrnIsi=HtKbY=-$4^Mgj{e4*$Uo{De9}Qry|QS${6Au0Oy?zom9M20fg~AZubp zlNKe2AGP>F{CpH;rf)N5UIpCO+kA$O2B1r7N0&}3sKDhm_tA_GfEu3sK|?A zj&YN4NCJ@)mA*A%Q{lm7P?@Q0uL<4dsoI ){P~x&P60##`Iq=k0Z9YP`!AP7PXYV^QkOwc z0k#1*m-tWtp8*e-m{9>R7bN!(0?z|U2p^R<^aF~ooHBC~*a-Dem)}tVKmz);mmyLC z8-L@Y5Hq7j+Ln#dpM@!<$C=&Fkuy*9yq)vdhfbZbJpQ7`^K_>?H1vCBxNHWq5M@7n z_{d$^f~+cJyIoUf>p2BOheEE`61RlA`6%QwRMn|q9j#7jp6eI)R+x^53DQ4Prknov z-+7;F8key!bU?-hOot?RU~fB^GP>IWrhfz<&`v8H0S&aowxd7&mI4&Mkz_yu`jjn& z%37#yZ|(-&O?k}&vC(&3B4)Ifm_cPr73AW%@! f|S_Fu^I-R?0=39jnyIgdEqafw6rk!J;G>JUj-s%&HOy$Ey~j$ z`>t~sUK)b2-W25t6GLujdLAfGAIO()992pkK)4pZM(4-mUN-0N$dEg)9W{0cM$?jh zzpr(ZBq?mz5M)FWGzd{iTQyexl#-x-6n$FjF_C?b@2;$0(krk}V$BpDihtz^{!HN0 zf)|=23PV_i$do>tXCp5AgE j|hPfEwLbE|4 z2$?_0Y%m6ErO5cQ$#ULt6HN~uoIched?QKGawYI-<@BnBGL?16bf1;vRh6H2Yir(1 z;n+SccEH*3j1oAAX>8(Uxqq<2FlG!X5F^%(>zcwTQok;4Lazt$O@<~b9QT4~5SF;) zw+Tizk(I+mVz6(YcHsAf2Op*TF1*C$MB=uvgg@2pC+2TevZYv_Z?h{}jYYGT^4=I< zWgmFgbziv+Fv@gX;*$Qgf%{B|WM~@x%rF}oaM8D2MxJG-W(dSiV1G9h9X~<`&=vQl z<_yH%qPxs(vfkP9$coVLAK`x+Y)G3Rp@%dF|37i>wj4K-qz&HBQ=o0k)~a?I(scLq znhkF>EKBNF}vMwWfcQ84b*gBr!q)SpbrUzN*LAHv8vxAFQ5a!#xfN0C7fu|AoXv zM7aCs9_N#Xltqiq#((YAMHM3`Uhp43{AlCfx)0N<%rW_kR(ot-VG0*l@hl$(!Sl3D z4XZcowaox=c1E9hbjC|c-(+xxk4M`O!c!~dhOrI6Ga|dh4<_3tD^v(ef91uN-FXaU z&Z#h*-Hdb!;>}taE=-|R+r!dBXt1o#qfy{R37Z C#sPRE9aUoZ~U zcSOc-BO7%mB)=q;IEroV&}BO186Y^WmvtD5??%%^RuS?!AUx+M33DKH>Nf^p<`aPI z*w!~i-&gjj!jMdy>TAUdXM&n9g@Q93y$c702cE!d#e-@rP%gL%4lZkqA^9+jL(Sds zeQnxm>oAg (C%^&ZytP@0X^z`CM?wNJb+%WJEKQJ+>a+oA9_lpo3xJG|mWoy-$DB;!9mV zstzJd *7 zeN8(1{BlUfjIELx_VE-Fd7iH9e9Sx%HlaOJzg%Mdrt4FIg37qKJ{E$jmeBOE4N$)$ z1yh*@CKsb%^P}+-ME+%ZhQq%|k7fESElq`4SC_`@ALN(cuJu&ZoZh1h|JUFC*W0$V zH$*%QtA7{t HeS0MNpSB)Ntjc^sc$&di_NQ}wJE{u2X^uVK *oTy2wAoZb|VS!@T<7#h$k`V6uEDFX7UrUHb$>SEY=r1%rV4T0gfMV z3AVhB{LSdG7k4hOP5q+o>9}@FpxWi$3lJkPV@COu(}jr6Ao?XlX9vsrgbLBWyBj0& z?| hMfU%%IVvp?r?J@POlj~y!3S?13k2bRp5u>DZH4D z2|uzgkB*%^&m1O-lduP!9qjMHDG7N9;(sq_KJp({32}XlLiNe7_h{)5jkMtzGot&f zd|0LRq(aYNF%oCAS27@b@0Lva+`n%cxWf@5bD)BA_5TZhTIC!MIi3~U!j4$5j>p54 z_{$;3V`b+u$SNMz4CT%opuZJ!6Hf$s247hyTPcSDigO0@`1JQs(SpQhg2dB?_J6H^ z$asK@IW9^;R?y!bCt{|0%*bg1T+f26q`$RiWV-zAvBcq%{UU>!jz4!i&?!fM;W{Ix zw@Si|SNWwLFU|$MUHKUtC%dI^tKtb}n+-fj!-+y6>R7zTFmO65u{fb94j-ejXn81Z zBmL1lfUCW-%e!OQ 5%!w|}oRI)m45c{Jvw#QI7D_M_Ts8Vk2b#XUlq3x!Mw z>ld55l9n@%4T_0?F{S$9l6d4U_QRwJD)GZ5<)QOBY&MfK&<#HwvTlmjd8lP7htse> zPW~OaX3J<@s1$ksq03Y@PKo{Ij*f{or0bes%|^82PnX ^7&(RR4|H-B z+*~Sj!%wHIx`)?}+F)6dZusdT%V*3omxNTF-3^@wR4_;n79+^yFPEUU*oF5pl1lt= zNx}WHYj7wBuNwpkV@@k1@r0Q}^p@NlZx2slA_Wouf9n$AbWA$q4-{LS)6p?!0&YI9 zE9pbbTL2O=cUqak#3k;&*uuLC@Z?;WIE7I8?G)E-iUWbUOsKelQ2Ff=hb!P@dmSN= zljcmM%E%#fSCVSGE2}C@;6NsSxda`nDsJ!tlydN+vT;a+3K%C59Zd>Km5oaxn7yUb znLu%pe@y;z2`c+*@9VxZab-Wc>N{cP65VW@{(; dWKV5R2izzc{K%reo z8FRiPMb+P3(;<8qe@2%B-N3>j3$}nC!^AL>3;5s39LwsyI9zYb4lW^wO5(1Y54oV9 zv-HDo;BT2li07muMt(xQo~ 4u*!S#(AfGZ?`GyNqsN;gaRyr*bBT(d_lEDJT4WT}IA?D1>{9 zgUG44$7}Qpc)i(gyHJUb!lxk6j#)Y6g7>6rPcKYUxf9PzV^$8i2gO~Ew?IL}|2jml zf6MXLY_~F2M}7^TF;SE?Fn2+sW5S!^zPmpPdHXyYSh!>z0_SW%K>s<}`kZW=^X63I zheL|*weP7Ml}`S2$*P)%Yxfq*Ow@2!Suk)3idjb;h Suy5^T%y~S`sxcQkW zOkCnTE}_gM@vB$*yC+lrgbw|Oizop?e+c1MKr)4iOWgSChrhIeZusex#m<^vdt54* z%NyMz7_;(}+r^3OEYH1;1sx}6 4-N9m(RiU~ z3Per+)9~BCTyDR>Xc(M@;@yE}f8#03OfH|lQKLXt7m}u?_G9mcl*sEi++GO6WMd@J zK_dP_Pl@n`L=K$58PuVZBbK8<;AYgL=Yr6JJjMgYTtPfu0yQ8!D}5MF-Zq+A4iB -lu$mYA0Dr>sQUOZL~mki9*+E8+5b-yS!{t;ZRAE#)P9suV&q z8LAiEvscl5Wbvd|_(#v}*j8OjcBCcshCRU!2g?stvGG#}=yMZ;ST8j4_E5C7=}f~Ef=K(7{WUObS(hMS0cU?~o7z n#EqZ=Ad>gAMin94g+;%;XnyyO9l{sdED=d_DQ7?GxCl_jj>Ldj8a+{>K|~L zag)i;#FI=jKEhVBEYvVl)1IkcGq!Lrkak@9)0=b7)8zPWDDC3pq0I^ZZ9%&$IL^9( zH4}gKU^g}|xQ0?}?+e<8z)O40{50T9dLXlNo;-u({IT%t2WYl%l}4n`c={iw*l(-m zhK?D*c~M2c7q8wM;0&gj?k&b-GA0u-Q_(nGrP;VEZymzalpkQ;%6?B7cBE)Gci#Ct zOMZy~=6vq%=#YJL?468dx=ZnE$_g%V;X{Aq#KlZac{Ti=GK4kPa(*>;#%@UWMf{Si zF6#VKiQ~6U*R&|nW4}W*Lk>Jb#|xXBo;PL&d{f>k!KwUd;x3(_klvU7h(tI`xg@ cOWiTVvZ>ny@yS>+QuZ({&a*0d7Px$NJC4e{*Eu9=_jFe0(CxKJY5H9L4m ziA9<)?MZvfhOEKmT1)zY1$ve9nvPCx8}{nb 1e%puSH%)EUXTn~k_(}eJWfZU}>b#`$)vnLWKJS`6dAK9y5;B!$B0nqY z>>`8k3^xBoxEaUL@J#IK0YXa~WM+f+K(ok!;EniY)(sZx>puSu^@$Gq@Z*00+-J}x zZVUD63EXGgQbv2I=sC6Me;>OcO?#~Kf;}Yf2`^BhSsrX1)W7}uk3Iul*$;FSDgq!i zG{)QJN7^1dWeUSAr-Z;#CZa5}0vpQTS {0&O@~Kk0Z!gXDi~R+sYUu?DT~g zf5F{ryqeJNW((7?IL+)& ZjbM8~5D~A(j*flq*noDn#k&CigzYKq7->NE76Q)8 z_EkLK{c)Rbs&eMAeF1-1h2?4X;mdh;h9B`5VTnJ7jahhBnf5Q+bOl4h`ZT+O4Tjek zh&|N#>sahJB37JPO9Xt*H(6bzg9-Gm$Gbr>G0&T04;yBz5Hd$W$lJ=ye`}7}&-B|2_EUe+_J7c@XK#n(XX<*3 zt6}%##aG7J<0R}(tF-oFp!|guTmT@OyGFLrw7bKpD)%l4R|tr2;}oJ;h;&MiixH4i zm;gFqJjTTRUb3XA?1GCD>{_vYDJ_`|bdpxgbKEZAj$TGm*HF(a?2N~NyOxobNtE1` zw@19M0UmZ9Xz_od#p otk^L SH*v zlS&KNl*e+=HphCk>NAn@o_%Jg_?b)>-lf6Qa2=_@2j5+D?8sV5nZ)tV^KU#Hnmq_l zrsm<;-3foe`~qpWmX2CkpI9Jj$RA7Yl4%EvFtqEF`^l>|>w00Ihfti2q;2HsAnJez zzt9~ku0q~6+q ?j$ekOmW!7WEI8+-}1TLu11h|Gdh z9+FlWIQ3kUYF%Zd5UI==4@s*G8(gldi;y8zVZ+zNnt}xK?s%uED@}j z;2D3_Em=b?m&o@lo|QT*e^@FrJSw}582z6AcTwLq`7cM(mSkB+I%Xx7;Q6s+b_SOn z0$~Y<6V04rDR{O{!H-Q#d3m01Su%NqP*pZQ|1|3A#G8aayJhOS>2-G|(kQNQKOKIj z06q+C)&Q<@AI42dfbSA@%R1Nt?>FLC3dn!AZF4-Z1uNR}5CCyNj=%88BCqOiNDE$k zjgLbm(JK(ZTb>+SLYbU-4dBVuH>MI;s3Npoh6S)54%Ix6mOM1oE?>bEdP&)P(*O4B zKe~*@WDt|dnBRW=|59kkf3o9C>~I0C&nqZs5cC(`K;n_8kDuWj!_ObDQfc-Cdobwt zRew!?Cz)m%L4V=F% m~oRmQU bb5=^;pw_dv${HeS?B!7xe}I6Ihc@_b-MjfvublmuSG}}y&P*+ zt8WV^E!%Qcl~gIO;S0*-woIuCKg?C&Jc1c2zj?~Rk*Zi=!PKj1=?#E)^aajocon^Q z%6LLt7{G+dZNrOCx^wAHV`wBk!!T#xY|GsfKODdEAV(+bg9uw=fCE$IT?sCKQU}xJ zEB7uonIGxo9OIO%%u@F)9Y03PFN)CtB~-HEOvP%NI|X0zGrjz*03FmqtsV|?q_e?u z^s6REQOT4z9=7}}R#mBIVoLD;P&LhAHPzgbzwi_pO`#seDZ!BhqzE?yYwYsV{IcxX zTiG9nni@NWG%@A(&&B!20=#d3mMtuw(Y~e5x{}t*I-L&coxC(lo>s+Xvcz?~=zDlJ z#pF5DB1bFY-BfTrL#>!EK4ocF)Ft~_b68vfy)S4|+Uoy7xrkh|K@DP9(;&VWgx><5 zF8jmDa5R|O4F^_`a9s=iQC^#69&%YT@~j3jK$zO+kJ3J19@*lhHczU5 Xva6$;Gi_q$Og5G1NS)-z4$ep97}YoVzPTs)!yP*5F8ldA(}{KUgg}{)?AT>+ zk^_># xEQzNwvy2B+7fT zXM=wSI?{-p-&s_~;;ukQ>+8a*yGt}T0#-c54ARNPS)`K-oi)ZDnh(6Bt)aYL(ua}9 zXC9hHHO@?$8mrAJs_7-ISZ!NEJED{`A+1_-DW7@B;2}7XI`~L`g<2Dm?A(~tGD-W) zVw9>Dy<4MGGmQ@my;6&vSm*!?2TAD8q^X#vp6;P(*U1=*IB?A*ybVGWHjWteyKq%8 zJk6=EF)P_!<6IDZ6MiMxyW*ZK1 r$UM5|5kOxiQYR>RZSAt1`f4!0>!c6cM!&oHYHYbmy5@XR#k2gBY&k< zq^#MCpzsJ}2OU{QaFoBYVn(rVSWL!ZplyK|`Zu-WO}j6DR&GPMj2G >51uSwu6J+S;&4}PRxaOWv3#KsVsJ>1{r2nsD
o`Naf6e#ZQ7OVv0kKD?BZF=LX#`ob<8Q; zExzE0<<0PNT6(RmvOlrtOh)7D0P<0`w03|I9IhjOLn}&Q@Uh*h`Ws|kvS8M1Q {s0~MYa0N}oq*i^H;UsaU $sF&uM+s>oHApB4;hLtw#PO}Gv4BVm16tL!fA9cNW%AyyXnisNmS#qZl3a@ zDvRZ3)Aef2rSNx_Z=Nz9l3X2ewR3HSq?|z|d95_HQrnxB>{eEY$rzNu@6?KXCr>M@ z0TKo!=vQhLs%BFpSPXILA;k>Jh@jLO^~LSl)gMI+np_pP$t%9R1GBa&QjVgJ2urDd z6ok nhOxvGyF`UK~rxC-dKaD;I~ap;AsC{vCT={9B=PdP{}3nBdnpq9XT2g zZ;2CpRGcQrSb`r@s0~LW#k-?P&IRc-)d*Rq+8k?KZ>_5QS@g1s`ywLojH!Ho+tuUP z(;p2^qVi8w!Cp)CZN!|MxOc%ildKD@TMGfQ`w`&%qwCwy*@7SFDgV>aXA1n);jVx_ zm=r-zIr+jLu|I{c>@)jH0RD#blKFwO2htyDG6+qti7G3f2>S{C<7&P9B;qhQg_hz* zaeAEuXK`sc0oo|H51x1x-o8G69Q-ghTj6@VCv^U|CHrOt^g1bL%~rTEzoLN|1SZj_ zzNKx%u>wa^;t91iRMLq#Q$jNl`nv>L35PX#*^~VW z44s#i+bbJT3mrkmI {qQwV! N&pxK-T8XMg$aMQ(hxs%!0_;kWo}l= z#j-yRH=Di|E-z*toTDz5c_I$GSmp;7uYCPcUio?`g1pN40@q1NWPZ_>(t0v3o6E|J zku5Jf3EOFlESf>r-Cc8kWS2Kv0_%hIVbkTeCEg_dQTx|DJRe_w!uv=f+i1Q#@#wWp z5Q*xv<%I?&OhA`Ox=hf$0=Q6ifRM*0FEELES(lv>%+T$6Y@|1l4l4Fd+k7WA?p2`K zX;4cJMG5y$*VQxt$eHwU(m^A_lD@)V%yJqg(!N^RUU%hoOJSDG(HRVt5psd9IO$Z3 z#uGL6d5sv1Zem$~Mh`9)VR08yFe?`sV*m-rD0&rh!y9mimi7`Axg~r63KuuIA8q0N zv(0%o)sov|RkSb 0F+(ptd*^H)U1!PtTDp&!7cnA3T9K$YBi! zte7!5(iJLg;aO+Q y@R66(|4SN8hnYp* zmwVhxDljR5!)I0V!2Dsbt7L&&i?KPo7IMf $s9>)EAK;U5ze&36C-fA5cUJP1jT9XOTg4rGJ7Nu)T? z7U_El=U8`ttTsGD-lfM3xdww) b1T|w8H2bLc0y{?`) z%ORe#IXS*kjc>oBII?#F6;JRjk7xDR ^{ zv0rQo8BfR~#xwh&YlKgI@HLH0fk-gT7*qa=@BYVi@(PwrU?`8+VLrDndT33`TIpKz z9Mjfl6=?0Z#S<&tgl(3vYk3_hy7dRG{;-2UW1hkK53og}!wi(Mg(@?Q5%LTeXUG^k zGRl}$O7e ;FItKm(AFe!g1AlDvux>o&K9@?gU?+T(wJ76Up# zFuU=3r%MK-lkcmTsHRPD+Z;Qby0J+CpWdlGIGv%<)}m@?qhFP 90aD4y%$hl~*ta30ELJp5kuXf%Q%vO$Dcv=b9s9D;y|jEl%n#44HkQ1Zjw z{DcR=rRDw^vcn`93<+^q!r4i4*y(|| HbstIb668mKb|ThdDkTa>A8Z?NGBz zuV*^pY}Y=;ac7sJi_SiO+u`$m0M0PsK`2~6L3giR)8djyQ9jS9K0JP9#=y_)L8_N{ z^oqSs0PbfY6-@b0FJ7%=9 G(lPHj@I+cL^!D3`3;|$Jii$h3z>^q^y;{@>~)Y zy Rr>q(@^k;Iqr7w3lI=+ zcihv70TS$s?iu#?)8XWn9###J6O?Mf314H!Ef{g-g9accM!-3x&x<5CSDcnydX2@d z1Y5vm=Z?7H2{Z O_+^~mtLzH48|aLTF N{{E s%$MufY>^4XGl$9`UK}?b)~G;!Hpquz4wwHb`{^m;05T5XRd&e` z$lE0}jRIkRo#Ik*d-la{m*1771;;*5<2^Q-=AJe`RaJ=BInXqnvQoqwIDF#`hTC`s zFsGw7@*KrteI+paOP={4CX-@D8;7r8>4nRYuPdP(Wf_dO-}vgCl#_v+^mz=`L>aZK zOLuLt>#4F2`SUC=1VQ-<^-Gxts7r*9m>TcF(+6ySq|vbCjNyK-;TZ^UxOYd&Hm?hI zG#XFK%h1E!Q&(;%x8iUhlzRR1Tgl;~@v%sca{w8_2o_1Rx?sn*@f5!d6%4b1;gSsc zir4tgoBSfjRB5hKPPww1lo$%N^MY!7Th=LY %thJ+XQw7N`Xox*1(J`?M; z!eM5Ay;AAVGV9don*0HSX@5}WSQ4PJtejy+sh17xY>i9i@1e3KFQ0PqLg4HfSy$hw zuq!dyVc&^WlQRKqCvo_;a#__%lv4<7U0L9(HB_ae9hAFo`tqKg#@OKqhd-L|9Ll>f zh*1? 0MjyqPGB3QoZ`WJc4!-# z0v^6psheW+9i96uFB(%#My!8QK9*uu4qpa7L*WB^%3V2}>3(>^1AIecH~f`1^@Mrk zGu2)ydC5GJsj!C}^!9(9+O0mkt^^OV;)NG@S~zv~X#~8HK^YHPs)h2pB<)Lo+T*4_ zwj{A4dKnj^H#d3cQgtfkMr>a`mh~!iN+aMsb2)}VX=>K|C}UbB=KPa)G2yS6_y7-j zzr+nP;b>xtH1Vk7meh-f6qE-WPYmthTY1SR8WxTx4u|S#C{77XDX`91pThUB?Xd{9 z_Oeq#>{|ZGjh}AOVGKUi%7X%b6;9feJ-bR0cmd9dcg7nI;*>qRXaWI?ki%tQ8dUxr zH=OV3MDUmrypH{a5=O@?A86Pj74W^ty4k|0scG ryn_efq7_JwO z9FL}#>()Kc<{g)g(H9&X@+sQpSZ|Z7XO_e?yyWq8a?0Z~7QaZzmQHV*ecr>#h@_44 znDJ-)%GlQ;z#VNxMIq?!2 A?(l&ge(IOL6kqPgK;+ydFqzhEaZ~Kuw^*z zFe2M8ZMFL+VKOMk9c@H^ZwVf+PpFeo#?_O^9gN6CM1)3ctK}!*G%R`?JMiISS+;G1 z9;9|HZE+*JdWA0xXxY) |}8KGME @p0i{>CX|I|8;OpnhMAW=#g@a^E2EVXCOlymMce}36 zAYiN;4N0IwvIU1Z{8Wn$W5{<+wOy&vR$0HJzf(2XT@T&@*1 J9%=lB% zk~fQA4iZOsdAElrYI#rDv$tXrn0bs|E9W%Bu#AOe5SB=(t$Z=ECHn@qv6zsePBl}Q z>Sq_p4+z2;01=%H(TTKXV`|EFUo2l&(rY;u!N=`q>@$sj7MnZ59bI>QbKo{yMH#)M zGYHL?0h k>aVx!c!#^ z4~R$L$s^f+9DAbNb;sv~;f6JHVsTul#q<*Vnk7>1&O-)5BJMiln5uQfL(C~hQxkPn z{&-3{)qn~e(c&(01$W@<4SUsK1r_E}*zR?eeG(z5)ah{>3Y^>VpSUBHexYEdp@-nN zECyZW@t^25HOU%*)(*H?Qf`@3gcbXJo4mJ*su%} 29>?4vV_X_#lP>;E6ic-NI0g)jKb%&=hH|w! zq7eg^VIYWgFzM=x*u>AvdP^Qx(?$_-#ZL!h_?buxe!U_uw)aKd7q?_vcJlW+TFpe} zBbis?`p2mVdU>wIC(`>l1_d)A>#U(p#pG*$4&IHzro)>o=^*{s4d*r4I7`kLk{mqJ z>gp8wr5jF+;uvq3qQss@;y@nCesh;(6(2eAC49zpY1v~OS6#dxK(D`YKd7_D0=BA& zcJ+F*boE-|$HO4pOi3=}%vG3+z;kB&+)3<>oT(zXGA_0=U`luxwlmV}WR-TtBjt*J z{9)KSNujCqi_rGR1HZdTiu!n1K~J-+!6O4i@vEX3l}1M>;N2=3G0uDkC`s8%zRWxV zoOq2{!k(@3rUyS4F ;-Ds-;EDzl>mUx4 zj@=shW)$_7$H;~N2V*oQfr5DIXtgna!H7E^YDzaAfNQfX4E@5crh`Gwg$QPTVbkfg z!jh+=%?j(C61isTo3Ak6R Gi6du zsHIXVZ)4AONqHfAh8(BlWuQlYU*HOJHnlI^&iuV#;{gz04vu{vNO7Q}J{*C6gSVr@ zo;^m9SQ`(SUwIOAA TYMdx- N5m;`!Ue;sux?evz8sr3g-cf8lF@EI22RWtwG|k(Lfg;2{alnc*{nyqrLE>{84~ z$4>DfBko@c3^(A-`YvY=7p7I%Uo5}lDBRrei=d*uu(TOVyVMlrMq&tkz|2SG8T+3g zOsdklUovy3kZxIH1U=b;h6+{Ok1w$2Qtgryx|i7`G` zy3J(`mvBAAhuqv^$-4`Go0zvU4jV3B@0WKUkeRd|HZ7ek(7_^~N5D8_&%Al0)zB^N zEfhW_37fUR$VVhuq%S|Ws17~0@ES8d5T8&}s~mnpQXSjL$VJ*6lnFpCCjbILO8p#? zR-B2j(`NV#H_T&GcpMvPrsdC0wOxz?mumqfB=zWL%=nUjEg#{3jQFN+x^?VF;1e|C zY1YL?uooYxQ{l1Kz1ArfbLLm P)2A1ru>2T|F=?20W?3DKl`i=eU3l^{t`NYAnTyjja#y(NSC2Zoy zSW-v3BAKXqto!SKu4)z+`I%baUVt%vp-5SXcWNGLGdMX?+>^xkZGxtGkU?CAaZA;E zJW!U;Q}7(JUW@2)vAauB?8sx^7T||vTc$2}W7e Kq#Jm~A@`(xV$WPA)n~%{E$Or2b0O|K-fJa)+pd~m*YHo?QSOV!HCkZG zR q-rUb~E>YVzqhykvi zdty7MY2^mci&r%yFu3P-*f4LFDTaCq#yM+P(SWzn&`W0IsP3ckOn7X4;ylJjTm)mN z=#hty1YcMjNYFB=Fge51xE4qOMyn_7##1=!9>G(8*`5u*mqC^8+6y{XDruwKU$fWN zuOptXcB?QK$6taUUa%gV#M3lcNxOv^q(v%=LrnZpdF+N#9Jw1QY8J9iUDy}5 cKa+>-HT+rxvH@r0q9FE9hqU!p!~G+=MQ1@71}(zR`zpSZ zm~L5rWTb{!2=5}XC@)+rQI(>d8+L5mOes~Fu!c?(J52Vy2sS%rTl9Tf-W*|jw`t)l zUrP8U5$sg&sSF4ALNt7lI^x`HLimCu8}% pK^HD>4Bj8?jB!iC(J6WH%_mKm)O @P>!CNCSo zGZw6D0g8+T#A0CwsE-}l9jipQwG@PN)~6W@h fdgwm88aB?ZOaWH zs^V@PFqYzYJ6u$v>~dhYxJMe$YMH-fVFUiCPD#M$N3Cf?M?>;`vpp{MEu!Fm*K+3v zxM?d2Uo3Em2F>87=uq^V1ZPN84RqW;G=uje5x7W$wy5B|4ZLxX5V^wj1Ab)qu>fgv zI5gnot}E_^kI#p6h_&25vcQZ5qU+Fy1sXtwK?f;YQuKG}uuu4Yrl06-1wT{Zy(1|u zWa$tK&Jy!GQY>r~d9#Y`R$9b=lIv&ofz4n7q;RZ&J!hL9ufkiPhC>VNz1#%YAIknN zPvtE|gMY$b=m5dl0*@$z9`FNOSlQ2|E$Mpx$%g`JyVa$GKW2NWw1eFeut^S~sW6uw zK$}8?TkhZM;-28>p-YZ*%AW&=3-kX8!8kryV&X*O{sH*nasTC=c+wz$b|{S;#%mE6 z6p2NhX?AzZ-&+{qP1r63%dX9o3+Ew{i+DPEO94qo4bT$F6bm4-6^5 g z6OWa!OIlIG6lVh_sxX$3rvgUcc1^XVk%JSCq&R2X-(bLC=!NLpV_id!gBzI%+!s&a z&)I)wAsK{V @dj#+)R5Q{8{Vm3L03&Ey$TazdVJDoOy@0)ww&koBSZAP(B67!h@BZ zQ@9(Nv1sm2?j}1pr%N`z;&!VMxS#o5&@DpNQHno|4ok ;0d@+iy23rTzZ%2@L)p#1+P` zO TJ@~MOY26!2lD(%S*(sX) z<>!wdJQP)8P|&e6-5;`Qqh}La1iEHV@?Ei~W74AK*Fl3ZX_;Ko!0ZhVq|K%3kx6Ct z;mhSauTnoGoPU>kh%>9KP~ri*UD cg?Qfm|lakAvQ7Bus&0hvJDAbA xranLgdlYf28F9Gcyy3GM|3D2>R=Fd zZvVleA%CC#L&js*_8*u)hqi4h0$GjMsp%k1p7S*~*gBGV)2*b+L@HkZ=$iLfR{Rv+ z;Kif6Bcyj)%?QxO^d}xg+mOLE2u6jVrd;W;vg#IKlq}Bpk3jict9?TUaOK8)jnNy8 zj^SV;H8>9G(oCIlT9SS2yga5UHp~YT9aTb>+<%gU XfC1fh$X$Kwb9S z&h36pRXt>kp7?qDA&rWzGi`oKs9etHht_<65T8aj4xN*A%61tp_0T-LZ3|jv>9Am5 zF2-+U30H$?DZq$Ki3q_f&+lQ;VFy9TJ*C($Kx| W)0%F(=;Vi&G0R8X;MVhh-0olg2ZT=Fp7KH19H6Tzs$5!w za>pX3yg;@9v>*SEJk`ly__rTqvKYM%`z3V{s6TxOs#)e^^?o85{pj4hk67u&6rTTx zmp)=6J HmYTUfN8m$)|m{=M5r5*RIhEiuDLf mA)gtdqu?Iw(wBR@$ha%(vb(cO8%=f54>7RFfdw@DjD?3m zMxZ=6CV(vq3NIP7*p_rej{Vh5)AqrroeX)Y6E#I70MMt9zzZ`Q_uf?e=6{iGQ0)L~ z;3NmlB4#>bHp4p<$8LDWk4=K$ELXQBbifdd(a0`m{60Z^CSMK2c@@UL!1y@4Pw>2B z5~z%m4kX6t;eBeG{h@bOVwP;wZ4L#CMcVj_O}$65&1o*9BKctuZC70pZsY !bnnzj9z$G#(aiJIo yGre zPIf#f7Q&6ICFTy|ddU)J$Ae;j*vtqszao=Wp~!;m;G>{r)z7y;qYYX*DukERU{lB1 z=ubfDh_95ejD>}X2RF4`JurM&+vUkm0}?#na IF;8|Jf+oqY zn%{o?M`vJ*2N1*&(Vo+qHJ?b+kc#uB5{O0cmXHH&>rGGcXeBB%=k#ZGUMi32Xk@T0 zw*Ucxz{_+^wUw#|$QYA-r1KJ)Z5CnOQ)l#GtQ8{&F4 y51G(u+ zIQ<`P(>du^7Jo9gt$f{(?^>acBXD}c45q1S4hnw9R!Jld=%L#bmdI23=*WmxeIGCi zi`hE94}fM1zCA1j&JV V1!@7X6JN# & wry7r*Kyw)eSmHgBSK1R5r=mCr3Qd9%=pW{4YEJO-1A)si+s z41@AUoj`;FoAMAtsZ4|nP Ntqm@M#6kA z#Ltzs05I^0hP6AQs|`rrMW7jxzrl|TVmlw%e18iJh}quVrl{eLpW&ebI}!^szLSRe zjXQueD#IvGl+0-#yc33weqxPf;w1LaYIt}IeFiyAc-0nV?OAv+?X2|n$N|j(FAck; zDf<~^ZGB$a4no6(Z)AW* jQHmn}0B+twPV?3J=)7L2p6ECpV0+{8%QzUOQ$4 zMuY<)oc5ZI`}NXPRf-OuMGF+G SAAR;JE-8UFnUlW1@~S z@Y-;3I2h-34lr6ya$o`N`v(m31;*#akzfS%8T;!il$P#-J#S;&6m!d-FnI%?c!ovY z7jq$*?EO)Dif#EwR2GJljYKGooPUisTG(_ba$XRTIV|tG+ZQuj3Y-9&bRj<#s8| zIUl@6K|^pMI|LH*+QsuG63& 5UpSXNR)7UkA142J++*R-%