ruyi 0.46.0a20260119__py3-none-any.whl → 0.46.0b20260203__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
ruyi/config/__init__.py CHANGED
@@ -19,6 +19,7 @@ if TYPE_CHECKING:
19
19
  from .news import NewsReadStatusStore
20
20
 
21
21
  import babel
22
+
22
23
  # not sure why Pyright insists on individual imports
23
24
  # otherwise, at the use site (`except babel.core.UnknownLocaleError`):
24
25
  # error: "core" is not a known attribute of module "babel" (reportAttributeAccessIssue)
ruyi/mux/venv/maker.py CHANGED
@@ -13,6 +13,7 @@ from ...ruyipkg.atom import Atom
13
13
  from ...ruyipkg.pkg_manifest import BoundPackageManifest, EmulatorProgDecl
14
14
  from ...ruyipkg.profile import ProfileProxy
15
15
  from ...utils.global_mode import ProvidesGlobalMode
16
+ from ...utils.l10n import match_lang_code
16
17
  from ...utils.templating import render_template_str
17
18
  from .emulator_cfg import ResolvedEmulatorProg
18
19
 
@@ -409,9 +410,11 @@ def do_make_venv(
409
410
  )
410
411
  maker.provision()
411
412
 
413
+ # TODO: move the template to PO
414
+ locale = match_lang_code(config.lang_code, avail=("en", "zh_CN"))
412
415
  logger.I(
413
416
  render_template_str(
414
- "prompt.venv-created.txt",
417
+ f"prompt.venv-created.{locale}.txt",
415
418
  {
416
419
  "sysroot": maker.sysroot_destdir(None),
417
420
  },
@@ -548,6 +551,12 @@ class VenvMaker:
548
551
  template_data,
549
552
  )
550
553
 
554
+ self.render_and_write(
555
+ bindir / "ruyi-activate.fish",
556
+ "ruyi-activate.fish",
557
+ template_data,
558
+ )
559
+
551
560
  qemu_bin: PathLike[Any] | None = None
552
561
  profile_emu_env: dict[str, str] | None = None
553
562
  if self.emulator_root is not None and self.emulator_progs:
ruyi/pluginhost/api.py CHANGED
@@ -1,9 +1,10 @@
1
1
  from contextlib import AbstractContextManager
2
+ from functools import cached_property
2
3
  import pathlib
3
4
  import subprocess
4
5
  import sys
5
6
  import time
6
- from typing import TYPE_CHECKING, Any, Callable, TypeVar, cast
7
+ from typing import TYPE_CHECKING, Any, Callable, Final, TypeVar, cast
7
8
 
8
9
  if sys.version_info >= (3, 11):
9
10
  import tomllib
@@ -18,12 +19,18 @@ from ..version import RUYI_SEMVER
18
19
  from .paths import resolve_ruyi_load_path
19
20
 
20
21
  if TYPE_CHECKING:
21
- from .ctx import PluginHostContext, SupportsEvalFunction, SupportsGetOption
22
+ from .ctx import PluginHostContext
23
+ from .traits import SupportsEvalFunction, SupportsGetOption
22
24
 
23
25
  T = TypeVar("T")
24
26
  U = TypeVar("U")
25
27
 
26
28
 
29
+ FIXED_FEATURES: Final = {
30
+ "i18n-v1",
31
+ }
32
+
33
+
27
34
  class RuyiHostAPI:
28
35
  def __init__(
29
36
  self,
@@ -99,6 +106,39 @@ class RuyiHostAPI:
99
106
  with cm as obj:
100
107
  return cast(U, self._ev.eval_function(fn, obj))
101
108
 
109
+ def has_feature(self, feature: str) -> bool:
110
+ # Expose the i18n-v1 feature only if the host context is properly
111
+ # configured for it
112
+ match feature:
113
+ case "i18n-v1":
114
+ return self._phctx.has_i18n_capability()
115
+ return False
116
+
117
+ #########################################################################
118
+
119
+ # Exported methods for the `i18n-v1` feature
120
+ @cached_property
121
+ def i18n(self) -> "RuyiPluginI18nAPI":
122
+ return RuyiPluginI18nAPI(self._phctx)
123
+
124
+
125
+ class RuyiPluginI18nAPI:
126
+ def __init__(
127
+ self,
128
+ phctx: "PluginHostContext[SupportsGetOption, SupportsEvalFunction]",
129
+ ) -> None:
130
+ self._phctx = phctx
131
+
132
+ @property
133
+ def locale(self) -> str:
134
+ return self._phctx.locale
135
+
136
+ def msg(self, msgid: str, locale: str | None = None) -> str | None:
137
+ if not self._phctx.message_store:
138
+ raise RuntimeError("message store is not available in this context")
139
+ locale = locale or self.locale
140
+ return self._phctx.message_store.get_message_template(msgid, locale)
141
+
102
142
 
103
143
  def _ensure_str(message: RenderableType) -> None:
104
144
  if not isinstance(message, str):
ruyi/pluginhost/ctx.py CHANGED
@@ -1,4 +1,5 @@
1
1
  import abc
2
+ from functools import cached_property
2
3
  import os
3
4
  import pathlib
4
5
  from typing import (
@@ -6,7 +7,6 @@ from typing import (
6
7
  Final,
7
8
  Generic,
8
9
  MutableMapping,
9
- Protocol,
10
10
  TypeVar,
11
11
  TYPE_CHECKING,
12
12
  )
@@ -17,24 +17,12 @@ if TYPE_CHECKING:
17
17
  from ..log import RuyiLogger
18
18
  from . import api
19
19
  from . import paths
20
+ from .traits import SupportsEvalFunction, SupportsGetOption, SupportsMessageStore
20
21
 
21
22
 
22
23
  ENV_PLUGIN_BACKEND_KEY: Final = "RUYI_PLUGIN_BACKEND"
23
24
 
24
25
 
25
- class SupportsGetOption(Protocol):
26
- def get_option(self, key: str) -> object: ...
27
-
28
-
29
- class SupportsEvalFunction(Protocol):
30
- def eval_function(
31
- self,
32
- function: object,
33
- *args: object,
34
- **kwargs: object,
35
- ) -> object: ...
36
-
37
-
38
26
  ModuleTy = TypeVar("ModuleTy", bound=SupportsGetOption, covariant=True)
39
27
  EvalTy = TypeVar("EvalTy", bound=SupportsEvalFunction, covariant=True)
40
28
 
@@ -44,6 +32,9 @@ class PluginHostContext(Generic[ModuleTy, EvalTy], metaclass=abc.ABCMeta):
44
32
  def new(
45
33
  host_logger: RuyiLogger,
46
34
  plugin_root: pathlib.Path,
35
+ *,
36
+ locale: str | None = None,
37
+ message_store_factory: Callable[[], SupportsMessageStore] | None = None,
47
38
  ) -> "PluginHostContext[SupportsGetOption, SupportsEvalFunction]":
48
39
  plugin_backend = os.environ.get("RUYI_PLUGIN_BACKEND", "")
49
40
  if not plugin_backend:
@@ -51,7 +42,12 @@ class PluginHostContext(Generic[ModuleTy, EvalTy], metaclass=abc.ABCMeta):
51
42
 
52
43
  match plugin_backend:
53
44
  case "unsandboxed":
54
- return UnsandboxedPluginHostContext(host_logger, plugin_root)
45
+ return UnsandboxedPluginHostContext(
46
+ host_logger,
47
+ plugin_root,
48
+ locale=locale,
49
+ message_store_factory=message_store_factory,
50
+ )
55
51
  case _:
56
52
  raise RuntimeError(f"unsupported plugin backend: {plugin_backend}")
57
53
 
@@ -59,6 +55,9 @@ class PluginHostContext(Generic[ModuleTy, EvalTy], metaclass=abc.ABCMeta):
59
55
  self,
60
56
  host_logger: RuyiLogger,
61
57
  plugin_root: pathlib.Path,
58
+ *,
59
+ locale: str | None = None,
60
+ message_store_factory: Callable[[], SupportsMessageStore] | None = None,
62
61
  ) -> None:
63
62
  self._host_logger = host_logger
64
63
  self._plugin_root = plugin_root
@@ -69,6 +68,9 @@ class PluginHostContext(Generic[ModuleTy, EvalTy], metaclass=abc.ABCMeta):
69
68
  # plugin id: {key: value}
70
69
  self._value_cache: dict[str, dict[str, object]] = {}
71
70
 
71
+ self._locale = locale or ""
72
+ self._msg_store_factory = message_store_factory
73
+
72
74
  @abc.abstractmethod
73
75
  def make_loader(
74
76
  self,
@@ -123,6 +125,19 @@ class PluginHostContext(Generic[ModuleTy, EvalTy], metaclass=abc.ABCMeta):
123
125
  self._value_cache[plugin_id][key] = v
124
126
  return v
125
127
 
128
+ def has_i18n_capability(self) -> bool:
129
+ return self._msg_store_factory is not None
130
+
131
+ @property
132
+ def locale(self) -> str:
133
+ return self._locale
134
+
135
+ @cached_property
136
+ def message_store(self) -> SupportsMessageStore | None:
137
+ if self._msg_store_factory is None:
138
+ return None
139
+ return self._msg_store_factory()
140
+
126
141
 
127
142
  class BasePluginLoader(Generic[ModuleTy], metaclass=abc.ABCMeta):
128
143
  """Base class for plugin loaders loading from Ruyi repo.
@@ -0,0 +1,26 @@
1
+ from typing import Protocol
2
+
3
+
4
+ class SupportsGetOption(Protocol):
5
+ def get_option(self, key: str) -> object: ...
6
+
7
+
8
+ class SupportsEvalFunction(Protocol):
9
+ def eval_function(
10
+ self,
11
+ function: object,
12
+ *args: object,
13
+ **kwargs: object,
14
+ ) -> object: ...
15
+
16
+
17
+ class SupportsMessageStore(Protocol):
18
+ def get_message_template(self, msgid: str, lang_code: str) -> str | None: ...
19
+
20
+ def render_message(
21
+ self,
22
+ msgid: str,
23
+ lang_code: str,
24
+ params: dict[str, str],
25
+ add_trailing_newline: bool = False,
26
+ ) -> str: ...
@@ -8,10 +8,12 @@ RESOURCES: Final = {
8
8
  "_ruyi_completion": b"eNqlVntP40YQ/z+fYmosCC0h5KpKd7Tmjoc5ogYSxUlPd4FaTryJV9i7kXdNLofoZ++M7TgmmOiutVDYncdvZuexOzsTGc19NoU4WfJabQc6/J6FS/BAxzyKmA++XAh4YLHiUoCcQqD1XB03mzOug2R8iPrNe67CZXLf9OIZwYVMs+Y4lONm5HHxnOqpwM13iHfoN935UgdSNEpS6MUVC+doEgLvgYHPleZiomEesyn/CtNYRqADBjLmMy68ENQk5nMNWoL3ILkPwosYTGQYcvJa0bn6iQAlI6YDLmYHECUIOQOZ6HmiEQhi5vOYTVIqT6HIgs/GyQyUjpkXIYjP5kz4qaJI+Q9emDCKinvaP3cv7LPhx0OUa0/htP/xvHvd69gD2x06tjuwr3uX7Y7tAFegmD6ARDHQLJpPecgUTNGHdu/8sObmEXFLEXEpO/gj6vvwWAP8+BRGI2h8A8N8fNVU48mAu7vfyVORatG3Fd/lQrAYQT8YhULMdBJn+lOe/gvlBIOuM9ctw6xH93SQ/UzHLfvjDC66w4FL7tycXtsonKsZP+ZIZnIifWaZ71PKxNOwRktJcfSCkvoOJinWnmq177BZGeJ1eitjSm7C25PdFrw72X0DrZOmzx6aIglDeEPUP4p9qsJCxV7X3X1XqYSxpwO84n/hdRao9qVjmXu3R61f90rUrE0swyifT9D5vjhX7l9232l3byoPuAr/qnFVwSnRrLpZJ8OGib8G3BYy9FFFuJ32DZXA2fDy0u5XSvS67ZsBipwP+073hUi5tKzWFqbrXNmdjmV8U4GxVWzY6/Vtx3Gd3ul5BeS2cgHzMQvoccN8XMjYV6PW3dPT/v5G1IRUMtZWvYI+9yaszMCUcNXwdCNkntLw2+HbjTzQt8JryHy51s/7c51dTG0pQZRa6x+oj/6+vb3bP4bdXRKIPD0JyPWUObKax3cvCyA3nDnccGBvr9Kq6zOKyZgRcBETo1wlxMn8Hn0gVrYl4HT/skGyaG1k6qh8UEKXeP//Ilc+YgdB0T4VR9nMe9VZqEj6dq/z+bvrulhvL+1iUyk2+NwrsGi9tX5TqU/d/sVZ3z7901nprSn/u4Poxf6RFjKf7/9rQ7XKfZTVsvkefrLgqLo2E4Fv6jplBY+FufKGW5YFLUSiFsjapFBtlPrArDa2qrdGUW+b9ZNe1uUHZNsFuwpECY+WOJV5SZhaoSQU20t4LYjZEFc0zw58QhP4UIYhznHjZTqxfFFBqRtBLRU+3QfIwrFkwfHBwgEHFzrIIYxQer6XaDlNxMSABSFywTVHVBwTkUECiO+hnqGCTCz0NL7eUhyARKPxgit2kAOSE/m8tvDwNmA4QxkNBFAyHYmMfCI1aAaL2QyHP4TCkYycIu0c58UhUvrKofI9WnrtTHwQXLKIQ6jQ7KumQviZfK4YlF6LcjGUPLumVoP09uTkxYF//wJg/FlP", # fmt: skip
9
9
  "binfmt.conf.jinja": b"eNpNUrlu20AQ7f0VAwgCbECk+wQp06Zwl0oakUNyoD2UvQRC1r/7LUkhrkjuzjuHOzqrG2w6Wo0ddd4NOlLMmvhshAYfKE0a6SPPSkVDymxIHN68s+LS4WVH6ijOMYntm5XrSQO05fSTogidLLtNqu1PC3EvidXEFhR/faY4+Wx6CjIqyAJ5J+QHyFcbxvibuhGYznDgpN69xrdD1Wa68QwOvl6DvwbltPqefYYGuIKecwXQO5yEop0QzPAIjXeS1B0I0+qKvwhoqp7YbDjhFIY5zAtVFDOgAV4GTgF9NP8wd6JbgLKE9uW+X3ThYqy+gkRvivTHehBp/wD57yfx/b7MtfB3NTwfHVuhxwMcDemw3qHmBQXcH49QaeJUrRCb6GnigiNfR4v29VaifF8NFUYZ2GIk4EJ2Sa1s+/KhR3qguZtUQNT5EKRLW/JaVhSUlLSLP+Bgi3Y5UKnwp71WsfX4+gabO2pqqAtC/MKz0CcWuiaCqb6i92s8fCFhU7+2Er79gUes69nDf9gX9HfteA==", # fmt: skip
10
10
  "locale/zh_CN/LC_MESSAGES/argparse.mo": b"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", # fmt: skip
11
- "locale/zh_CN/LC_MESSAGES/ruyi.mo": b"eNq1fQt8VNd5523SdpPZbJq2aZN2N+110hpwJAF2HrawjTFgrISXecR2HAePNFfShNHMZO4MQqZqBFgggYQECIQeIIQlkHlIYJ6SEEoTJ91uN32m7bab7baJ7mi026y33c223T52v+/7n3PvnZeQk938XI7mnvd3vvf3ndM//5kfP2HQ/xp/zDD+DZU//j4j639/9SHDWETl96n8eSp/7sOGQf8ZJfRPksq1VH6Oygkqy6j86V8wjD9+l2E8ReV6+v0hGvTTVIaoXE5lP5X9NNfvUPnL9HvnLxnGVioPU7mayv9MZTmVH6PKj1D5RSo/SuWvURmhcoDKxVS+zzSMt99tGJ80Me+v/ophfJvKbVRaVC75Vayrg8o2KtNU0n+G/aBhbKCyh8ouKmepfJjHp03+Aa17jMo4rW/fQ7QG+v4/Pm4Yb9HvD5UYxr+m398pBZz+rhT1P0eT/0sqH6PyZxgeVFIX4wUq11L5Whn2/e/KsI9/LMO+f3mpYdAQxsql+F2nfrdTuYzKSSofY/hT+QEqH1yG+T5N5QoqX6LyJ6nspvJfUXlmGc7l8jKc0zeWYT3fofL9VL5NJR2J8c9UPkDlh5fjXMupJJAZlcvR/uBytOtdjnXfWI59pJdj/pKH0W/zw2i3m8qdVB6j8kM8/sOAz88/QmdE5SOP4PdTVL6XypepHKSy5hHgx3s/gfP+3Ccw/1Eqn6Jy6BPYp0Mlgd544JMoN1L5KSr3ULmKyjep/Dkq/yeV1NQIUOVnGa6fAhwPfwrne5fKRxgOVC5h/Po09rWBynVUHqfyM1T+x08DDx98lP6Pyi89ivUdpZLQw/j3VNZS+btUEooYjz6G8aseA7xOPobx/+1jwJe/eQzzvr8c63m6HOdlU7mZyr1U/hSVf1AOOH23HP3+j/r9r1fg/B5dAXpYtwLnZ6nfB1dgvcMrsN65FVjXBx43jAoqVzyO+Zsfx/rHqfxZhgeVRD7G76l2334cePBLT2D9q58APtZRuYfKvicA3w89CTxb/yTms54EXrQ9if1dVb//8kmM8xMrDYO6GktXgv7qqDQZ3iuBPzdWAl9/h8r38HmvBJ38NyqfYX7yFPDthacApyYqn6ay8ymM94dPAe/+/ims56cJKVYyvFZhP7tXYR2n1fffXAV4/IunMf+KpwHn7U9j3sTTGO/E04DvladBz7/9NOb7WyqJJI2PrAacN6wGXu5eDXgNUxnidVH5PK9jDfhf5xrQ+b9dg3Ez6vdPrgU/enAt8DhJJbFA49BajPcGlf9M5Z9Q+RNU/vEz2Md3qPxFKv/NOuDHp9dhH8+sQ7+qdag/ug7wvrwO5/KtdRj/r1W7DzwLPHjyWfDLp58F/vU8i3Y3n0W/bz+L9f4dlR9k/lEBPCqtANxWVWC+UAX6faUCcDxTAbjdqgAcvlMBPPngZ4BPaz8D/v3qZwDXNz4D+v9TVf+LRMwEKmPTZ8EPuqj8JOMtlc8y/NZj3E2qPEglobIxvR584h/XA38e2YD1v7QB57VnA8YZ2QC6/fMNGP8DGyFf1m8EHFIbQW9HN4I/XVe/v7kR+8psBP28fxP6v7AJfLtrE9b/O5sw/7s3Y76Pb8b6glQ+yvDZjH3/yWbg2b94Duf1yHM4n23PgU/sew749ofPYf3/TOXLPN4Ww3iRytYtmO97WzDeh7dCbjy7Ffj24lacY/1WwLdvK9b9na2gpwe34Xd4G+ji+jbs81vbAMe3twEuD27HejZtx/7Pbocc+iaVP83tt2N9/3k75n0fIdUOKh/6HOjxEJVxKsc+B/ownwf/3P081nXpefCBv3oecPrB88Cnh1/AfM+9ADqvfwF86MwLwJ/bqkxTGWa5/CL4+1dexP6+8SL4+Hs+j/Ne/XmMn/o8zuFNKollGf/18+DvD72E8vhLgNs/vgT8Nr+Afa34AvDyxS9g/We+ALnz+1/Auj7yMvSaT70MuB16GfNepzLAfO5lwOu/v4zx3vVFwM1U5YYvQq6++kXIufQXsd7FOwBHawfw89AO0OP5HRhnUn3/0x2gyx/sAJ1++BXw2ZJXsL7VrwCOX3gFcNtP5UaGwyvAgx8LGgaBwvhsEPs7HwR8/jSI9h+uhN6zrhL73kpljPWzSsz/U1WY9+NV4L8rq0AH4Srwx6NVOJf/ReV21p/o43Osr4Uw31+GwBc/aAF+lRbw7rAFuv8OlUHW+6oBl4PVoJ+3qoGv/70a+LSoBvhXS+WXmP/WgH8+Ugs+ZKtyqBb48Ue1ig8QEr3CfCCM/V0JA+5/H8Z6fokGu8v7p/JV1pvpsLYwvu2EvPuDnTiXD0Qgx341AvhHIsCD/RGMdzOC8/izCM7jf0QA31+sQ1lRB761uw7tTtVBX7lWh3X+fR34xCej2H9VFPUdVFYxX4kCTitiOJfTMbQfj4GfzFL5m6Tf/kwc8//ZlyGHfiyB+T5EZQOVyxIY52ICePU+m2iKFIqlNvS4H6Sghzy9C/s7QOUlGvfOLuw7tBt4tWc31v2N3Wj3Yw3A20casM/nGoD3X24Avf8nKh0SUO9+FXJ7rpH2zvT16xjvd38d5/YLXwFebfsK9jH+FZzDX1B5mM+rCe0uUnmR1u1Q+RVaX+d+zPuBZloz/V7WjP3fPgA+/K0DwNv/dgD0+vMHIdcWH8T5PHUQ+Bg7CPjfOYh+M6rdT7SAf3ykBb9Xqd8vtkBeNbYAHjdbwK//ugXrf1crxl3SCr050Qp6+7VWyPmWVvCj4Vbw66+2Qj79mfr+/Vac03sOYb6PHwKcNx3CedQdQvvXDmGe7kOgl784hP0+cBj8v0KVOw/D/mo/DLz436r82Tbo+SVt+P2Y+r2FSjYsd7Rh/B+0gS6fbMe8qXacZ0s7+N3dduDjXDvm++AR/P7UEdBr8Aj6DR4B3G4cAV3+1RG0f7QDeP35Dqy/pQP0dbUDfOaPOsAnPtwJ+by9E/N2dGLddzuxnj/qhJ783qPgF+87inHqj2Lc/qPgF28dxfn/4Cjk068cw/fVx7Du5DHAYeAY+OrlY1j/PxzDeb3/OPotPg66XHcc7avU77iqbzuO+S8dB3/8PfX7o11Yz7ouyKFYF/Z/owv63He7ME66C/L5XSdwDu89gf1uOYH+O09g38dPgH//pvr+6ZOYf8dJ7PPXT2JfV06i/X84iXHe1w08+9VuwPdZ9bu5G/Uj3dj3b6jy293Y52w31vc/uyFXPnAK8206hXbRU9Bj9p7Cfq+dQvs/PoX5/+YU5PuDPYB7pAffT/fgvH+/B/j2wV6M99lejPPFXuxvfy/486Ve0P9X1fe/6MU63tMHfrGoD3yqUpVdfdCzvknlLj7PPugJiX7Q8X/sR/8PnUb5qdOYd/tprPfV01jPV0/DnvnD08Df71H5H5hfnMF5/fkZwNM5A7r96ADo/6kBwGH9AOBTO4B5Tg1gnNsDmO9PBwD/f1a/P3QWePE4ldt4nLPY94mz6HfzLPjtn5zF+f3TWchvcxDlJwYx37OD4C+7B8GHjg/iPK8OYp6pQdDVdwdxHj91Dv1Wn8N3+xzw6Ow57O+3z2H+97yO9g+9jvovvo7vra9Dvlx6HXT/d6pcNoTzqVXl60Pgc38+BHi8axh48cAw5t8yjPPbN4z2N4bBZ98eBr/++fMoP30efP6F84Dfl85jX/vPQ76PnIc+9g/ngV9PXIBen7yAeS9ewLy/dQHz/G9VfnIE8iE+Av2hfwTn+o0R7Pd7I9C33v8G1hl+A9/73gDdf/MN4NuHL2I/HRdB79MXgUffvwi59U8XAbefvaTmvQS5HL8EurhxCXj4t5dwjk9cRvsXLmM/r17G+Ncug7/+5WXgRekV4OXWK5jv81ewvi9dQf8TV0AHt9V3c5RomOluFPxvYhT09d4xnPPyMdit1hjoPzkGvL4+hvF+V5V/rb7/7FXQ3dKr6B+iMsF4fxX8/F9ewz7XqrL1Gs7lW9cg1979JvBmzZv4/Wtvwk849SbskY9dBz50Xce5T6ry29exvu9fx7mV3IBeuv0G6Ph19fvWDeDJj98EHiy5Cbn97E3Qz5ab2E/1TeyjRZVTN+FH/Zub0INrbkHeTd3CeP90C+N99DbWs+o2vn/+Nsb7ym3AdVDV/5Yqv6vq/+E26Pkjd8CfnroDO//X7uCc//AO9MV3jwM/PzsOPKhXv0fHsY8/Gwfez4xDD3hwAnLs+ATw7soE1vl1VX6Xyi+yfjcJ++qVSdhDPZPQh78/CTz5xF3IpR13QX8jd8EXfkt9/8kp0P+mKdBV/xTG/9YUzvOvpnDOv3KPbBmGiypv3wN8PziNfVSoMjUNuhmcRv3vTgPPf/yrNAf7Nb8K+J79KvD+G1T+BtuFX4UdceU3AK9/9TXg4favAQ9avwb/Yf/XQB+zX4Pd87dfwzgPfF3J+a8Dj6q+jv20fR18cUrV/5evQ0/8ybeAd7/0Ftq9/Bbw/Mhbyr/4FvTfv3kL+338Gyh7vgH4/K9vYL8/903sc9U32Tka+KzVUBkLJkJmOJq0EolUPGkmrCorvMsKlZjW7nAyHK0pMwIf+9jHzKfD0WCiwQwmkuHqYFXSDuDztlgsUlUbDEfNOisZDAWTQapYVRlLSFdzW61lhqxd4SrLDNtmNJY0k7FUVa0VKjNfjKXMumADTVhqJ2lYM0lt68Ov8nKC1bQc86UGKxKJ1b9cHbSTlbFY8qWlL/Mo1eHdVsisjiWkB0anRa6KRMyoVW+b4aRVZ5u1wV2WWWlZUZogSNNti5m2ZZlBMxK2k2asmjvXlZiJVNSdJ5FqCGMIbkOzldFe1sTMBlppfTDKazdjBKJYCgNYEYs2TUCxoslwwoo0rOTm9dFILBiyzapg1KwOhiOy0qBZl4okw8lUyOKutCQ7FrVLzLoYFlNfG66qNe3aWCoSEjAFo6EAjcB/Vlq0mWgoQpuubHAXu4UWy0s0n6HhaYUJsyoW3WVFw1aUgJ2kkWpqS8x4hGayTIJ41U4zXE3DNgSwd1oWj0OnRB3r6mJYbCph0ZpClm0G4/FIA++Yxi7h5ZjJ4E6CX1UyTCsPBKuqYokQ9aZGNG4sammYmslUImoLkKh3pSWTVdEqygOBh8yng3a4ipcatWikXeFkgxlPxCoJknbApP+V8gnrPXLPmmDSqg828NkT1AjVqO3K/KZqD/VWpU3nbxdrTiPSDgkKbsc1G7eacQJFivdF3VbSIjclaoJRwkT+FIzw5pcSkCu2bqYx7WQirGCQO6qHsIQN9cFIhFcRT1i7GD8IznxkZjIRrK4OV/nWJIenu/IklZFY1U7uQEC2bNkLQZKBYVNTOl21S17q52IRWmbEMlNxWpkVrMtaFVMzHRNhjh4/Eo7uJJoJhnir5uLNwI9EMGzzBmSFYdtOWQpridYeWEJUsFbxguIELSjSMB9NJ+mvSKTMNxizACYThmpO6/paK0qASzD84sEEMYycfpim0Cx8uslwHfMEpo1wlHoFI+FXGaLJWgZMMFFjJdU2SmTRivLikVQN88IYGtYyddoNdpKxutYKoMci27STsUSwxjIXW2W0nK1raBc0N0228XMbLHPr1jVLSkyBX8Kqi+1iHDRDYXsnCCKQsAi4dcFkkqFmC0siXlVnhcKpOpAawZV6ECsB8cQStNN4LMr0pqFfTYceiAeTtYttmkzWsZSqltqhF0rwV3RXnfVC9EU5yframFqDvcJt92J2w/jnA9w0zixeENwDNNGrTfwL02hUslMh2k5kZ5hxiek9TiSv2HIgHMUeaRzwz7CwZ9ox4auVYM76bKzerBewc4NImLgLwYe4QRU1I1ZakWSOXQdEro4E7Vrefm2QJUA0bDPO1YeZ0dG6EolYwi4LBF6qjNF4NQni+y8/SyysgdoLLT1Aa6Q5N1r1hFOEVzZvkKQZYf0u4ntyRLx2O1YnnEyIMhwl/Iow443TKHTgdjmNsRl/my9hmj3BZKyukUEQjLCoaZAlqikEckTyhFN2mdeVW+yM8vkKsdER+gd2lwf+6a6i3AhssUrzJJaqV2wiFa9JBEMW8CgUiy6SM2F8p0qiyypaYxIskBgRMWErFNgVTiRTxOisKP0Vi9ZZWO0WkBdDPZ69NDqYiCVcsKyMG9Iytq75LG02wp9ts44OqI4GTNncibUCWqWSOok6hu+XUkRaQXe8aKqukg4mVh0QrpWKRnlW/zZpeyW8hVorEqdxzXAdYcouSBf6K5SqSpaZzxM+uMLQpm2UuGtjNA5G7JhepBkMhcKKwUdj0VI6JDBd35oBfx4nELcS4VgoXEWAblBckFsIWlf6+CxDXVDYtiGv9fxJ4s2ldcEoDR4K2FaCd24Sow8yF1DAWU0YbhEjriN8idBIjNBAsqcbiO6rg0SDJcwchBKIde+ylPioI1FHfQVImhEzZ5Uds0Am0Fb7thZQUACK1pGaQNoMbWxTlOR5vQtFa3c8Eq4KJ03afh2hqjQPRnMPxoMpaS2pOOs/pEUQbXkTesyeZHK0xgKDta2koJePazPM1PkHstDcU7fU2cpmizRhwEakQSxRrA2pcsQ7RM0LPG8tooMUaNHQdIys0ZTKekj+kDZrVididVh07uYV/YHX2RDU6tQDfOqy60raKSF4Khqic0/yEQVDtACmILOiGudVG4vZlk/JLMF8GseYrcb4fHy4KSISEGeVXfNDAaZG6Io11JL/qCGRmhB8I6DstOLJssA2OoydMjszP6YtkIBZmQpHGAxq3YQIRACsWj5AjGqrhdN2yRdyI5stxnfWMFckprWVearLwEmaxm2C6pdTpCUJsFK2sFyt5pcwOUAhZrXRJ58DFokh1SlLiLMuQk1Em03FuX+u7aAa2p6oKgso5Qcyg1QMUiKjpLrVkQUh6E9MrpoAUM2YTFWEqSmaQNkFPkWIuXm2Rr0rmAgHmYmam7UCjrOlVqwqZ0t0KNkEflIi6kUkJUXjL8cs3rBqDyK2qlI0RDRJ6GCn4oyhYDeeKuTOHQ9X7cQE6J83rNJwZPc1qYQgMibJG1rtWO1PjkYMLdof0U32lHqzfvOJVYRY1DcUFsN7pv/bUxVLRZONbIN5ppwSjs+jSbBSGRYhZWgJu1MkmHMKWmgLemYD4HlLrRuMizZoRdliMv16izYxyeZh6agxuMzcSJqLUrDpWzLALK3K0gJWbC1elUYnJtIG8GwxX6OWcJys/fAWPXWYtiWmlHDifPM0Af2dJK9f39GSZg3OaDOJxzBTJ8/7vKAE60AEblpEmNVOpTKz7R9l2aWlKx+YhmhQYwf0uISrfiqQsk5sRWJx1hlgbRKBkgyirrJ4Rgfa7YtaBSSeFbR30mSiaH05RSoGVJ1aRnqeXW/Dxyr9E7OIUcqZWnYW3jLPJJvfPXo9qUYXJaLlLJkRkq4f8LDRU+1LsCKfbcALJhZDonanX2kUbFa2QkDBCjyjFhJ8I+vyPFgJK/tiYYViFmwn1uWCPokCJ0cJcV+qC9bDaIAVyEcm3gJWlCMNAcVA5dRkN6QR8Y6z7JlgIgFhG+MTocUL5IjfJnhUJrYsbZ7xQ81GPchCp7+CInDrSHMJEXDI1PMvOBSCC0LzdoG2OD3CcDLkjp51Vh4csDg7xozVj9LJcJxFiKvOWFGBOR0do2YqGStVyosm11zZTGyL9Tyx/KyAxxrIDLZcvqslll2bqGoU+IerPdbG6wsxH7NjWsMvD4iVrfpZu4g5fPRXFgt9lpZCuvgWVmpXJcLx5BN7ZNmNSz4qZKiJnWwoGthTegr4ZhhhxWrKmZeYrrnoHc++yHzySdPdqwb4y9r4+JwS6Vu1hk+NdBvRFsBOlVmVzaGUT+oBj88IQqSimpvkNIRSJWcAyoHyCr2INW3Yz1aA++YbY9I4Z0itYovaZoeJmJW+BITU+nRpaTxF+gOvwaYtEFbTYmvIDI9q8eQCHuzapeJsd43eSCELCorFy4oDVTG/S0VJIyYMFmuRfZyB3IFoGS64tJdUEbP436pYaJCyVBeuYSKiE6DDqCK+KwqzCA2lurBtIHOQShEi29iAY2iVy7nUDlm+qro1YTvJfgW73NwT0n83qsqt4Vetcnfje2z62QgSS1o2tVkcjYm8XqL+TkVFjulPpS6ZsclTQ+fSuHRPNFiHQRbvUapkI9qS2lnPvls/M9jD6vgOMUlhbvPp59WTTOBaGYW9P9WumFZ6MhipaJFsIJk0D/HYmhj1WCVoFiK2WpUU5IsEoRqwQ4SgQk3WSCWTAIMVTViA1Ybj969nEAQbXiZz08ISVWt2ESbYDVdktML1uaOVus7pfLWhgNVjAECM9NqimrejZ3UZi5eX7okmdhD/YXWUjiznQ4k2VgmN8Ae32bhpm/nMpi3mlrXrtq9ftcXcvnXtlq1LzK2pSle+MGcRAnbdpULGxmLe5BLjIXM18TX6k6irnH49y/JQoxULYBgcD5mamRGLChEuc9FIn58jibmTkfvL8gd/2hpJ1ZSb7vj46SE5/RRsesjcJvZGeQ7GyUfVYrvywOY4NWh0VmWqIuzFXDJfO5cGqNHnCI9j+MZ/NBoSU9FKUNyn2xmrSGLHGU8V+MvNF5c2LG1Qeu+La7eWmBuXRpcSSfLvjZvKCvQgSmB9qoYUA+WKEda8nGWk/2SpVVUkZRPO0ChiLbNKFLKSxFQwnyi7mkUbqxI1KTBDVv6DUCzEZUOQDUc1DzJW2Ta1M3nR0FV4i3XxpG34PR/1YqX7lX0mUMIBDUlijOz019NDkQorDY2NyRIzxs56vXFRwQnB7DAxxDJjtXxdSXYIqnewQtpoGquJvyZcu56XRpTHdj3p+sZqJSiYl9EPMRMtUBL1sD13nlu5kv6KNyTCNbVJc/HqJWYFbSicTCWFsW+NVSfZCCxxvUGrqkhtrWuQyiqxwW1zccXW1au2LimTqJeMxFaBuJVI51xPiydiLTdXxXmJpQ+XLTMfr00miWksXVpfX18WlO9lsUTN0gja2kvXV6xeu3HrWm78ZMBYzW5Ccc1gzwUEnPlSVUMw+vIicPFFwpI9cgxZIEd2EC5ksCJd11isv7DVEAUfbuBPNJjSIIVBspAntLF2s89DrMPFCmfKtZ3stVxirImJUieoHLJg4rDqzZgVDsFKZxO0wDJ1X+XtDkaVXSdqC/tm6oKJnawhs+zTjeMJoi0ExGrdCJryycStBBucljRmnTPIQBBTjJVPnzPS74F0XT4rjbWbnmFnScSSKeG9sdg6iqfE4iC60lqlZsrAbnMPUVs01mishVJNaFrJPgpsjb4ysJUOswegh6h2jylsxyPBhh1aiC8JGGvVCYjiYLqCVCIqa9Zu3bamYouQLysGhM6KTEt5BDKwUpX6kEjYGs9YrJaxGkLnn4KGL8PGtI8yJsQtzID5IDqoMUmrgSXoQ4o8VDCeiXE4jYz2LB8erUy78vOVTu5TF5SgrVj6BF/TVp5UmkP72KinbilRTFEttYuM+EW4mrDYBmTIDCBOTgdrbtu0YT2LPCblaFJWY6zTIwbzJ1ShZTWcwMcLjGsFDpP7xylIf6GgiATFn+HQoV86vK8c2zyisc6vM/B8rsqqABg1V6+vWMG2jVh3ZMRyK+UPUdvyj8GTuoqGYDsQ3EYz8SSB4ngl2ttdWs0uyRBhA3w2EuCOs8eaEdqoWGMoz2qlFQlbu5TPWVwflakaNzguUAuqUIzwISX+NcesIVxLVZaRrFrKOpEd2inlUulgiyOmQskkfcIiPbWxm2WNUFPSyRkj4R9RuiUTJ23JDQW4HZgUdBeChVCTCmjyUfrcMT5PjFFh+911xNRomuow/HiuSzQaq19prOd0CPH0uIaBOmZb1UVD8Ej5kivm2R76eGNpW02EfdEOGgzZv5BSwJ62hrhVZq4WP7qoETSEJFTQEUrUQNQGyezwPlMfuwwDekvHb6bwvCWWB1CpDBffdpnjGBvEsBQBtshWe1Gmqq0rlYNW/5S1b/HF6ID6qlYMSQ/tieirrYSId2rBUiQ7oSVoq5VRrY/R6cOAUcVAq2fSFXVElpkMKpQCD2J2Ssyy0BheI22i5TbTFpFiEmisxHJOU7GVWb3yWOjihqXJRMpaunwJGx4QwW5ddGl1MGJbS5ctyR1pQfvZuMnYGAO42DkM0VRG38oMiWmxA0dridkR39x4BYm8SMp6mZVxOINI3WXPbZJGKpT8I+zKC6cZmzgthpgrZ4ysUUkxWd5s+InpHDelkqWx6lK46ERgu6xn0R6W4jvko6hWZdyafth5Q8FZEbVjwsVCrgaiRRjSn9ZA9tt6clFaxDfjWuk2809lxEtAJW5VCdOguQkYCa0aSVZEMEEsOElb5ngMmU/Ef1kv4UPlKD9bOlmd6Kh2EdmIkqytM2UU2a7fX4ssuPw3B1mFjmUJM7VnLQjna+NKYk88xhJZHYrpeCqIUaNFD2dZuGJ1D+dH7CAVtaqxXLeEl4rDRjRXSgChPIgIojAVJNm3HKy2ELtgX6exOcGeVoV/j6/duG3tlidVFF+Fm0iFp1asPcopK/3Fwz1O1VINNHL7AhhUI7kUkDQ6fLFSf5Y/RPhx2oDtaQ5ZsNCWJicD0Xpr34Gy7GrhS4znUmwVCiIEibqEAYMzZjFSY0s256XfiifqMwOzESBqyyAns2DR48z5nyx/nHHtyUU0hBxO0FOaNK/zze+2IpKooj9YRjFh+7/7QgieboWcOn+zIn5KnsznnKxjfyJLwbxpCvTPnySH/bjpB9kt3U3KRFTnyzfIWo9Ysj69WPXnMF8sZWe31dHnBFNvuE4HTAyVLZKfImJs4SiHsvhLtZ6jLX9Zn+v5CAS2KDc4jQCXTpmhI0Kab0B+Jgy4qK2Qy7IJcXbobByqzaUU0RE4McDHriHbpe19kXOrYogJczHPskQzd4t0DvrghcBBT0Xb+5qpw15IU1fHvl9jxf+U4VO0tabj7EVL8L06uCuW0O1cE6BUGcwhEabZurY7CU8u89gykSwiZ2HBUMiLKN2HFRcbN2thOeMz6Ldlk7c6Qa79MnOieeptKzlPbSqq6z3vOYmvupDdaHrputUkzoTINq/a9myJymXIDU2pAJ4to/ksSAgT+Qp0xKJgBOmFGNsKqpYstgnkVgLRE0WyZWidZUpzErLaIStUrFkRgShnUAjBV5lyQ+zVMI1ubk5VUq12LZnsUlqsDaQ6tBF/0obN65dS5dIlXsZPjVo9pzxI1q8VIBPjS/Qny0RJafVpoF5VjBNlydLR+a6SQFxlcQZ6uNwsYJ2puqXxhmRtLFqqfgaMbeEk4ej2LeuRey28d5Hr5MUH5hmLvIhkneignPYi2QHU19hONjoBaY3F/67ljMNy1gaStY1cpQxAPhLfzwL+g+1R5tY1UbLfQvfX+rYzwhVmR9vjIVZvNHcUHi9WujsT4h1ejkOO1CD7z3g+LwHTzc+y6lYWqk4Rw69j4zMnJ9Beaby4dqvxoo6bMtoK9TawTc2KUlIYh8+lQAOJ0kELKcnOLX2lNGnWRFOl8UhV8hXm5n63+0ZXPyiXCKa/jtUf/mruqePgdY3VaHj5PdW06wiSRQu2UZPXBxPR3HqM7qkAsiY9pTpj+cbzkBJdiesS4vZQahtLM2mi3QvZSaD+qkTBaKARVPcqcvwthkpQUZhNuFrOUWKN36lERASigNv96matShp3tNTaTeyBl5lrmqEf2oMshETc4891WDQYnNlcFxevDoldRgCi6SRQsCYSqxQBLJi802rg8IzV0GhUvhqOPyy5AyzQdfSVWWsjjc0pjNSbaDXJ1NdoKGbLvoxSL9hGFCCJC/XsE2J3ILsVk0QlbvuwJPetW73adf8+SKhd6XMkq/3kiMesAbjeo2yvq6tAK4XgHXVy8+f0CSmD9B0N8qOs2iVM3Qu3Toom9nkYYJuVMbIwFM7zuYGr64HATIP5Ejs74OjiZE6/aL6GtdB+on5oZLpfZ0ncYvv+FRGNbLK+okKSuI5RUEVxnbLBCDtgkrV1KuAoZORm0BkcpE9oV3yBOFJVBKlaIggltMK5Bzuf0PLJL6iMKveikBxtMdxhZPYRJtLBmeeYHLbzhUyKnHGBHgopmGWo815431SU28Lhuof/ldCBobkq7164lUQdJQpkKHvPJ6yrZWOydVazDHVNzQxBVVq76ZncTzvzbrkZrmD388w8jpmNPuBFYc+zIlHYEJyqwSgCi27kMQbvB1xHhoKzJLV74ROxIWU78yTQGuCJojkjN0vBxCasqQvaPkqmMRON5cwl+XpZo68n5wMx1NFHplMxnR1sLRfuVDDF0tUuvHbCac1FOLFF5WKgqptKBFd1FQ/N83ppKHgsf5HAeVEhpl+8s2BTo5oEoewEwwjEmddRaMw7emBdQRjI/hXApRc0voJt+SKbpfMlSahUJRripKoLui/y8N2nZZIFJZFlyeVmZ36l4RGH4BpnChPClpucb8MMlLhsjbl4D0T+DsnCMZ+kw1QIjS9LVtBYnP8VrSk6oN6Av6nO48OeStS9QX/6JaLWrDm6ipvE41zWboO9ktivtsDukKidTMXZXyI3AGLQNpg7iV+2AFfVQonVskqLMCgMi5R9/Np3qVGxxGSVNittRUIBpRJYLHVNnEWLhJxiiSoeAfgFu4cOYPkKf16CSrliW45vmxo1qSjpJwtXT3J0O9vgrSbEpiIWCr8Zi02SV1ai3GDiSqRUYJhdVIyl7n01QXFDmFfU1V85wsaISTgWY/9fPbt8QyHfpaigT98nFpg3ALRUYhn+wIzAHSfmskP83iEnKBypwEg6HZ/tChmDG7+DIcg2jEV2eX4hOF3Dco9U/IzaxyE815fdTSORmRwOFVApc2qUjU216q+8FrC3q+V2RAMGMRczfzT30L+NSzgdJxjxuunboJJnpOKsQlj47DVUhjyP5AZCa7xJqI+iZ2HGJZ7d6dG11BjhJPT1ep/NqOyLHW4ahoGsGFWUxhNWwhJHtRF59RMLx+G6YASpCXq9itXC5M2tLc+9G8DygI6K2F3QVkmjntVgS2aOEqBiTihTi6RbmAWpb3w3piqs208qC2pUrrRr1rSQaLBoj/yilYW9rBlk7LsuHCW+Q1aUpbsr9LwJPdoSA6OclBsJKYlnOsnXpaKWzjjkFMNQsMG7uqWz0nUah4G4ARQUuS4MX44/yTu4KxZW3tdIzKaluIFOj/W6IZsiTNgftTEI6PR110r+w8cBVFP4sICtQBSXmCsJlXTSB3eWNXlTV/syUrkahlhCNKfstHktLKVVOMIXjbKHwV39uIV8ccOPP1keUapwNRu9bB0pILopz1Z2uLl7x9LrUNQAK3A90H9NJPcweWnKKeM6zfWFP7+rAplyexRyqJmS8P9l2QmswZebIP0cdgi3UI73niWlilQWvlh3/9zQIrqoF7LLdnFISBDu+oV1jcQqXe1tQT104wVPxxJYnn9QqjfORXTUHawmF+3omcjU3sUF9XUHW9eN80FI34pnfMH9bndAlY6Y9KvsRScwRUWyy4pOhLvReYlKK0zObNc5aV5qk88e0nOWliYs7/Jw0Yn8Hqh40QvMbpUv8Z7dV+Kk5I5sc6uEQZEgixS0vItsdRwFtkL+FJxFOsVW5Fo898IeKWeu80lfJrXdIKyvCxTZLLSX233Cp0hR5ERPbYd5T4RILW7vc5BOjeVejRL4Et3kVkgWPvKlfAHetczbVXhXuuFuKipXJxORj69WtWy+6jETwmmzbiSofKWcyb1LFrvCQXihVCBAhQESOvPO8CkE6qoyLhdGkkHbUMk/LCTxF4lJz9hG4rQK8YtkRCN2OO6pTXGo/VVSVhiAjbqx30xWSFKe3ziBm+0qKcqLIYs6UenXJal2B31VRIBXWfD8iNtEpysrgNrhmii7IVW6Gc1VjaQOPgpcwbJTcUvdjNIsdnWF976AvgftjcAxCs2l3QQBDvAnG1bozLJQLEUr990IxInlPwrB0feg7X8HwnDFQH6416sTzh/K+VgoTu3VFohIuHWSCsLqTEpSr3xxeLeJKDs5E2YJquzPQmkQFIbHGBhb1P88Ycs8gSlWYOTfB1m7ikc08qr2JGO0gUakfS0x7KoY6+dSNJarYOJu97KHCOdatrOzL5MkYyE8KiM5L0nNR3OHy5f2tb7UGpEvrtjnC4IiaGXsH2UkGYDZ4B6+t7ID33eo6y8kuuyd4XgcuFEkTTXPieR2yQoXVlpVQcY9TyKIslbKJr1iz0gedbsTrEoXMJt3p8Nw80WgzpL8ZVagkqHzdC43LOH6SHTKF9H4/GPle5fdMbSvn8Yoybo1Vlqqhixl545PfmPbED6LbJgMJIW811G8Ou9tFaNoVpi22qgVE37IKJjuqm4Ic0PcdPS3kwyGsCtO9AsH5SqlAfiVk9jAFoeqUQm1xMr47gejvQvB4pPEqqtlCtbPUwlxcGY9e+GGFhcyhHsD2gtIxrzHC9SbX5LJE07Ycjd2nlGjMqj/fRH/uCJ8C+XLFxiRoa3ESOHkEF7SIm3TL6LVWZGQP2WKGXQdbDY/yy2hUdnOTGprTCjCcJmlh651qd0a7Tw7zFB5fWx4u9TBzgKFpF5ITT0YRGtQl+zzzFcWa7Z/QPY85A3qGb8MDnF2ijxEnxUmCdGY5FoWzHmZh4JVDMT/bENW+qDXlb4K/wAW+IQ+3KfQGb118g1gZqY4YxXwM4o8AuCaaVHfgzpyh0hOXVRIEeRaP9VnEqy0Y5FU0sqBQDEpw3dCWAoUiOVau62qVFLPuwDIKdVJbDhX/dMGkNtP33wryV7gOzgZpBrr697VVpDPxfZCk0on9IS1Ug31WRWfSsNQKQGl+f67Bfb3opML6+AFDbM6+K8FayjAGe2zOva4Vh6MCy1ptCdDX3lCfL6YU8OH7vfxhvqDSjr7sLLB96iebw2et0cm2MPotYMQq1Fhlyykjl9XqrSUv0vxzEWeM9G7sUXsoj6W2GngCTsBnqf3gW9VrKENsyNvvkYxlfW8h/5oNO7/To68mZLNixUT1t2ExZd4t3xxkVoR3H1cMsU9MLyQ+zhhCi++UGJVCRxNu4N82b5Ev5GiAkC+yz5sfZXkOBh9bEg98xNsKDo1dBhTXsMIRhgveK8LH7JQci6fAJ3jc2s3bC+V5B6XpfuFUCIYtatZlnBKZiUbPbaRivrCpxJEEc82G8x1IR1BIS4qf+xgzCkXBzoCUNhLsszIuTQkyS00Zc5nfUVIXc7n945Wr68o0e/EMbNze/hfKstVSVNR+CtyadhI+fOxWHpLRFDciWyn4o9GakZUu3Dn+TuMF4mbxDMnc3mVoV93pAXpP3fwBQVD2bFFJKt+6lMUKpdzlBeQuO57dYU84GLa8tOISCHKeffOqCeUqtFJDzodohxv/uzhfxtLzBoadA/902jsfnXhYNHvfvyo7swG92WdUvWESFH9+51N4bsUv8A57B9pBjcOWx/Men3TeNVOhhYOVy3AmTjNxezNsc0v68vx/HOHuiG/hC8AMNWXVoRK1dMg5bDql5V94pNly0qDkXhtsOzhZQ9/cvnDjywLbJHX0ko32DXhUOnTqRq7dFusYK5mgZt0gc2btpXirjCx9zUSVaGBP1W6bHnp8k+Zy5aVf+Kxjy97dNkyali6xcK9hALtlpcv+yTaref0sG3Mw4SzlZvPr9q4znwhZSVSYfNxQs2a3fL3U2G7KmiXBavKqqJPUq9oTUq8VK/W7niWOu9YvdH9WLpNyNCrMR9fv/6pSJiTX58MbI6kEsFIKd/8JFBG4/LTfmI5u4T4zyeWrQhsqNiw1oPl8rJlAb4YTmdcuk1iFUkSNEvjESLUFZyMmSC5+EQqWV36qNdOceXStVE6T0KecvPRynAyoK94EuQbys2ng5VWxHy4bPmnaQojEEh33XJars51jc72nZq5cyV98srbd9vSV153+kfmmpqcgxPfa9qHR51nJtoy031Oyy3+7/he9dSzc3vYab49d/ye07w/feJqun2UKtCfh7tyjvpnRu85QwfT/Redju6ZycmZqRPp4+0zU/1Uld434nSMcePpUWeoveDrzs7YOEaY7X0tM3bAabnkdB6ZO9iePnnV6RxzDo04nUedsbuy0HRrU7q/lWrmuifTpwdn+0ad0wed229mxiap3jm/L3N+b3pgeLb/MNo4Ld2ZwRHacmbsdrr1QmawrfjDzzQA723fSPrUmNN5nkZyRtuc5pHZ83tnu0bm9g6nbx5+++6AEZi5czgzNUX7yuyfcvrOOp2vzV5od44M8N9D1zI3hmk+p/kWwccZuuAM9RLcUDtzp92Z6JoZH0h3n01fPzHbdS3vTRln6LXZzgO0FGqbmT44c2diZuIArYlgkz45PnNvmsYO8GZeb6J9zkwO02KcO3cyF/Zi6vTIoHO3AzuYa9pHC5+ZOEL9AZ30mX411v5m58BN59oZqsVSZ8YPz9xpAqTmDh50Ok7O9t2h1aaPXEyfnHr7bi/nYTsDE+n+y5npM+kjw3Pdo3PnTqmXh/U2ZqeOOs3XaSNYAcNodJpaEtxyWtKiaXHUfvZSz3ztVcWVU4REWe83p68NpgeOU1du+5CJfc1O0n8HTedY29J0y0nC6WOZvV00Sbq/3Tk0mO7onLnX55w48Pbdloqtm9++2zrX00nonjUV4ZeeZu7Um7N7LznneIFzpyYJ22HFp2/unTvY4VujzJ31nLM6AemELfEmJzqxYSx55s6h9J07dNCzI9ed0V41WGZqbGbyltNGB9ScGb3qTJ2gsd0VHb9HoFcwGbqWPtECANCG6NyIUNQCOzozN28z7bafIBzJHLlN5wkSfPvuXtq3S8QuEyhGxMwuhIjnejvS3beK0WX2YC7ZOwcP0KjO8BShF1P1Ox5j3h5Moi2nnQuHnbaT6StDxA3SZw9iI1j2XH8Tt7l6wGUwjEj7iCG0zNw7TATBzzg77YOMK/oVZ4JOuuOY0zxMI87cmUz3T8xen5ydHOARW06iiihl5s7FAK1v9sIkrWn29b3MXyeHsdD02btEhLQoIl/492cmD2dujGBXmelTWBedLlEvyIx5H07g5EE6/sztMefeazSlWqZ+vfl7TXsD/uebaSPEPpmIR9vSJ25gHbQDLDbT1Oy9+0xdsx9+9vq2HHDaJqiXd3Id+zJN+zF3oPDTz5l7x+mcZq/wVC6KzY608ynL7mhHM9OD6b1jHl/df53GI8yanbwwO3lFeClxasLU9Olhp+W2c6CHWPnc4ITT8gbvp6WTu2a9DTc7fJoHOnQq03wv/VqrM32J8BkvminGNtA5M9FHwzijrZnXm11iYqnRd4POhplEawtxMT68rhFmbIRIuln++840FPVFl9mJ8+nTA0A938DUZHZA8UM1HssOnp+PVbfEGNTACABNMtOdeQLJ964zQdVpPzg7cYEhTNKAxpw+RTijiKGlz5mcAKUSyTpT15zj7TxdT2/68MDskTHn3H4/WUmnuabW9OE3claU9ZrzzGQzn6asjKSCn61p01SD7zaT09Q5Fjf9Tc5Vxnen/yopHHN9B2ampgm4UBiAIM6dUefQG+mWozOTl9Nd46RqzExcID2D1jg72cFo19mWfq2DxZu7lvEBOiTqizGd8VvEJdP99PHoXNPeuXOnnaGTtAZCbC1PRwiRMtNTmTsX+e+W25mJSzOTU4yJvvUwlssfxBdIBM9MtRMNsLDumyJ5PddzAGMGWDzrpTh95+ZODcyODpJwZiwTceL0jIBBk7hx5bb7evPcJB3WEAQtkblAQQ7rQLMzOj63f4rOdOZu7+z5SeduE5A3Q+OPdhPHEabODMwFAVQRkq1z3Vf8mwFoeF6n4yLjYv+IaDBHZgdHM6N3GMm1tMcick8z3dpOaoyC8DE680Mzd88SqZDekgs04qfCjbGiuaZeUlCAKfd/tJkAep9Xm01mwvcz6kwm4i7WF2enRgXawCjiqXSaxJbTlwfTTRdmJo8Iil7NQ15n9AyzNcEgEo6kQ6YPDTtHDwFJSb/KOXKGxPAU4TWpYZkLrwNngVzOuTNzJ6YBWzkArV+ByljZ0yidme6h5bHY7hqjRWbOXQKc+Ww0jWAjCim6Boj7EUBmpk/PnugB4mRuDwCxmSgr1vCU6dcGMlfPMfH4qevMa8QZsHBB/eNzF9uITQZYc53IZ3U65UMvm0Wbj1cpjirsOX1leO7iEPg7sMN9WETMiiHCDl7NRFdmbJgwkJfvE8rpU/dmhybYGpg4MO9jzRAuRJO8SVJsvOQP6gzpwQoFoe7Bi4R+gutDrgpPc2ttplVpyB2nCAys5ZByq7bJWnG69bAzdGN28DKDZGwcchiNZe/QNZyp4zRVumss3bYX42F4/3iagKF79Io4Qo37GeP6h4FiMdfcDmT2D0ay0hUiZMBhBEIaGg3tMUl/q/uOAqOyiDe/dQRxBLxw2q8LjUz416psGWatPJXansYRTILeJAfBJGg1t647QwOugBeB0UfnQMQ119MMVGG+fuQqs6NTYwwLKEZitdBsODHCNaflIAsoMgaYqzaR9kDsjyjAR9tYt9qJqCe8SmBf0WeSzblTzWQUOqP7aQSRg4VeTVYHAyjLWcsrpkSutGpQAj4zdnePsEILQiMtbopAfI8YAziuD6CHlOjXWiP4Cq/8bpNz7QT/23GUdHNYyAHZE2mo5y6RBuF0HOJpJ/q0NtFGRJwZfcPlSmBD/gmJaTN8zxH4BnzY0Tb72i2CJkbzbAqZyDt0KF0tVwM5CjLtQimDE12E/jMTh53mFpbEA51k65IlyvotbTxbRWaDRkwsokCMIxtkc/X6CDghC9yJI7BSmNdNDuc+hGxCaEOwMPimDmCZcyf6nf0dzr0WWN5Kt5844Vzbx0qdqL4wtdKn95Nhx6qEuwOARRmJ0A3IeB8a8C9AvVdsYns52pm8emySvutMN/O8R6dmJoey2L5fV9JDYVoWBc2k7t8R7b9nZrzF2dvLZwvwE1He7YX5DgbmR1UCKPFMUQh6PewnuyJPsnWyPqueSSa+SGZJZnCYlAbG3ZPjpB+x/KG5hMQDtLf0bbJdztLp5z2GTEdzhc0DvTUSr+k3B1m9oC/E5cUyJOkvlkbv/4OHkf2qDowIpYKCfQuw2UgQq8BdQd7c/08fR85Rk8GafQ8ju8IX5kiuK0cZJgHIftZIgHyKUq447XeICHN7uX4a5jWybSjioCui/vy3jJmhNF9nbHdaeqAIkVU61zMEZ5lrC/ltEWIaea4nau4quDOTx52J467ql03DObiu+/stD7+zxnVtyYbpaAE+WiZJROdeN1OH2GLYvmu2Q7ZnpvfSbtjyvtNMa3MZun7aGF0BKhZX6iuZtB1HYUvT1/yHjdkzd5U205v/trFzpTtzaB+1Iwpgw0IJ0lbvS/9FEi3+7/O+c0yd3KdOdHOBzzzPHMv5FHvmmAyjw3PdN2QgWPlAGWa/lweVBi/yyzk6Aj2J2gIbqF/6yDD7HJqvM7cndRi6jmnO9nEVS+NOduIRos7zHc8QEzDwpjHaOB3tBfvmfM/uW2oWkuWFdH+4huCINbD3+bt65ocJiwgK+X2fMiYch/XGfNb3mjGd5NzpM3Onz9Fu0j2jZAFBlNCpwvYE/UC6gdbSE52gJRGtncBTA3jEyPCQOTv5GpDUYI8gC9O8141R6fGja5POmcOM1vqN49nW8fToIf636QJ/z37qmL74J1SfCr13DGWdK4s+eAynpesDUGP3X3Rev0owxgz5bfyvHLMLlmQye2F73ZeOEUyAFgKhaRBlC+50s1YjzJc66FeOM4MjJBa/29RPiP7dptN0Yuq5Y7fC6TxPFaz6FRyIGLK53GThl33yLU7nJT5PtsxuEAPkAdhjL6ZLeqyDVELvIDhgcX528gD0YIOtortn55qOzU72pDuOcSM5bzEq2OlgkJGh6ZD1uzkOIJyZvdLlbsSAzgv0YxYprDt/XtKVWdtXZpooSSQwYKj4XQ5aqGLf7OqfPIlevDENjYHcx4+J2ZIAASLPjhx2Jjpm7x4nlc7AhpzO9tkLVw1liQkNsl4z0YehVYXT2c0+Pv52ej+2LU8fw9cye+Goc+X8XM85bGv2bNfsG7eolX7mmEUBoj2n9zstb8ASFntQ3BqZsb10ij/8W8dwiwkfznmB2IRrTVGxT6jlv33MrrMfYiDp1kEa5lVlYwgXNkixd44cnr3LJiMokeNbUyeY7Qg+0IZxxPp7q8HCk/Twk1ezpO+BZjje4TjQD0RwY2VZ+zxRYqE0i41Oy5lAMM2AwzHdetxpv4odInzGqCe6l+EGysBU4ZqD8Mn2/g0YbIh1nFRqNy2geZh9+nsPMvWt3fQMa8L0Y7SXpsdGgZfuY8VQbUFq2IABkOW/VEywKvZUsYQ9lEC6ekD52TXIeSn6seJME/tbWYKSYetqTEenGOuFiwP8BoENbm+/toHOIFsD1R7diknmn9N/nIZzd8Jp0bEO2KSFdDdmM3AQ8WGcHZy72Ebqwuyls6S1yBcOPhisBU72EFD9XYms2eklC/UHKTIXXsu07WelTh4jBg8lHJhwh/BvUXmnfGPlL8RAozlSZye6iI7pRL1Q8rE2ZY7pzn7kNZiU+J4zu5/FTQDF8e27fUBKVkXJ5JMqA8gHtINmALQzJJS0D96ybCfsMIlYp4csqcNkWwMKCqkq1hieySPS3+8J4PeDER/1a7cLfi+Yg3IzE0MIyolUmTzC4Q6BhKty54Qt6AyOoIKZJlHIeKurtcHnQkPOTBwzUIhVftWNibEG2KF8R2Rx+j0PhjL4tYuGA97nLnnPBKtAfAv7PZmEnZZugpCyKETl9h+hqnbGbym3i96Xu/Ycv5TuUKgdhvdAoJqCR6p1XBmCEuQCg+0mOMqHelkJFjHMbgiRu/wdowz1zl5oR19RDTBc1sqyp9cZBL0BpnfVXgyA3C35lT/XEUN4Pzc4ruoAc/VDkT7RnPRQHAN1sLCAz87eDvEB3ROdiBhXXgqEy7uxLsNpG6fJEdwnnZAJmDbccsnPCdwUBbcKMp133HkJZE+G0Ozl8zN33lQjcnDl4EXFEvJGVI0IYVVvORfX0sht57I24tj6iWAOvZKhR8qkrnEfCIZKljdI8TVnt+48b8CBwUJNVDn39AQNJjpITzVyPeIsF/tblYwWtHD94tnvBYsGxjKPzFPoVZ6l4o/TMOsGheQgD8Nf1sBBEGJDkJLF34gzM7eaWY5PHCC+7fTdkE2wUPOGBE8jCk4fucApPR1XiTxzxLyXFdJ/Md3GIlhbtcoAwmIVyvnMXp4vc/7AbN9JmCzpM7fSZ15jRaWp15GcBtjwrKKwL0o4l5/LuwhneJQmFgSHBrRLm8GebcgHDImbS5jMFTg50okOXqLnoo7TTpsLC6zCfXI0Kd9gJHXEB+N/DNh069lE8zyBZGmO9rLsOHub+C6z19FWziTqfU2nIh3mrAHx0iiUSbe1FngVmBO3VLC814A2Br6hcEuyfVQFcFObInDIw8Go9PAspVy2B6R1mZVm5vMolKCF5hGEGrRm6dNQW430wHBmTGXK+Jkgw7zprqFQys852Qmb84KvqSLLoiUrVkL973KQlyWnf3jmYgJKFbtSCojPB5a+dZNQ1Y22GTn+MfjDc3DC83/2t/K2FuRTA/PXXrTMdD8ZT35f2v1Huc+0bkaQn7kU7qOc7DK72wLR7px1wraDFiqe3+wh3HbIdMOcLFL7znB6oTj6Z9+YYJeUP81A2YI6l0COpuuasotdVQYOkdwHgVnDgvuDnQkYgqnEDc6SMg0p2jNisBahzfpCjwITY/STC0QpZ9Yxe7/s5iwYqCiKuG7Mk/FoZJCIgxMA/DZ520ESLKQtZO7do3kI5rwEYYEF80Hu10PU3nfSw29ALriTuyf3HcEFdWUF4vw+V6d3+7DH4UAzA5gYuR7RaemZuXuKQ0icqbRfdtd5NIfJIByBtA7tz22DW8F1o6jwUlPz/ddo5+4vf6337QtW5upoWSqdCKJ70N0LV5Ppl77VMl8jRnN+LphtnXTrPTYcySaUzaoHhhkETW15wR4V/BJnuNiDQq5MymB+/sUJ7o4N+9VMokMC8tz+ERCRyJ8rQ0jxJgbIdn5rC9Qq5s3ZzwGbC38OOJA+wr4fsW5enz27100w47jO5BGkvjGFQQMaPZU+OY4MSVjO4j3ljir/9Id5B5hUnrlzpwzmxZfGirwAzKfDF0BIeUUgVf1qh5qpXwE2icBoMXNdPZmxMfZe4lUkFcmRV4BVkKOg3S4K1AGlNt9HwYPf0sOfAsiDfDYvMgz78VibN+HspcNO+3UYx278Pkd2GEg2QF4NEEqpCCoLwdXessNhutGpMQMaiUoUnW6eG5zMHLzuXD0KjVKpDJr4TPAPndi4oLd/czIa8t7/hc6DmkJPAGcO3iCico+tQCu1isyV85ILlNMEs7iKgu8ZYPeg3WeA091n4XcAVFR4nAhAp9dDu/A//JuTQljoTWCW/OcuAbmUr1z9QM6Fwm7CWlr8gl8BZgSXxGq/1ZX19C/n6mjTnFvA6mq5qjKSPAPr6unM2ImZ6VFGoo7umenT6UPi9m4eca41KbQdHJeYhffwr86W7/WxvEYzM91FmoXv4gqy+ySIKig+fUkgeZXlB9JOie8dupVu2isMNU+M+Zlr1ivArLHxO8DK/+Y2cqW7MCWh45wWviyq3NdXi/YpKF8LN3WpJa8FQCHJhkUzuQignsev+xw7sNy7HR0tnI8z0UlszINrAdRwTzpfai6sX76GtLB+fvmf5fKEM92vMChbiujmVHPW871wOihLyLMTyWa8fkJfWWNf4rlLyMZSPvyiQQ9134Wsjvs80Ws6zYfneg8YWWRzf5xhbzuT/97jyI929biiR5zbAxgxd/qMe9IL7sqTEZ4IV/I/0KviGnRaeJ5XJQ1xwAyv9LLPoPUeo4jyxec812uoXB/+f1YIh4j64r+NpCogde/DxfyooXgF803SZTrOQ8p4aC96IuuonOOreLFbC88FK6L6JtM8aZHuYRR8xNdAxhFAoFzqsG2EYPE6r8fo3AdkZ++ezIwdzX6iznS99xgiv5c6g2NtOW5itFThBvdRXm9aZQVPdIpew1em/B38Vm8uS9YP8+Yx5Xm6qndnCT+QI4y7CemmC0j/Y/PdO2mFXWq4/B0T0UHNMsk44M0LpPMbpo+cI50G2TXeO7wKBIZC76wHeWfu3p0ZP6IiPfDw81u8fkoQBEu3DzinOVUEOSO8oaELnNQx/3O8YiP1AcGgns8ztN5Gbg/lwNG3yojdQacDJP1pgAYjnGhhSASHX9hp3s/5BZKK7DeBkPUtqC904+OqHGhoviaxXu3P4vBe3z2nayhz8zZH1n2xABcFv9t0mm21O03p7gukIYrJP6HCJaIcLPitXoTBgHAkpjgHYznBhUwY+A5UdtC5S7jQpJ/pXagyka1siUe2tzPT3cFZZSMXnXFJelXmB31y41uSQpcZuyFZDr0GGblkP7k6JQesSKF3Ol6f3TfOgkWMWU6HJiroec25cx5KN/G+3K7UgiNtcl7zPBcBJUq93ps7Bs55nt7wfmMSHSHLHoLTSs90ui4ZuDUznVNI1843vDmxaOikCPUTLV68w6fk5VTBNOVa9ylet496dxfWKvoRhSFOg3d4kWqIp3jZ1S/Ob3cG71VeLznGe5G38DRoqSfrzXqNl42Z/oF0f1/eY7xarZ+Y9zFepGeogoQbx93u7JeneBeIp36PLIRCrtmpWmTX+VPNfa/xsul5fm/62r4cxR2pI5zfQsIcKYa4+3erhXQnmj092GL4FGkWPyqZVOpciYUFvIOmDIBOgaP3Mq+bJ8McWfI94DFnXW3/FFFVjgQ3QFPQ/XMGV1eCxBOvUuK6h6EQ4I6FSlXAdkER4Cxwzjvjb9K5cebM3mmnWTs975yj4zOUYTtxgJipBIiEvYK2JBDCGxnq9Zu9Kvwkj++K3ewqT8CCgu/smt6dBDdQLLMYbryG1yuJkT7ntpuLjZRdBK7IAoXy0DNigOOAByObQw02fTA9OSQtdLAs3wmZq/e5gVi/6sJYmvX67gItJxyH8hwv8FYX9Hw+14kjWV6DsQ7/Ey/KDdLieUzyr3OJblzAed7LjhG/59zvMFd8sOWkuqvquxf1DnMaiyuhODGVHqgc4zpeluVXmH8MdMFLvH7V7YeaeYEDwHWRlWjje5B33n7u9Zd5nuSdd+U8sQRMEPHUYWVJl2u+pVT04q/xwjkisc6is0CL9A3eByOHca152H/RKfvlXWWbIAQ4np31wx7y+8BTeX+KXUP1MWL4TEjXFHehAble4FVelTzYto+ZhC/BJfs13qzLWOCUUMMwD5yVqiEeYljAA7zu/WHO1BRuBlYmETlOv+DRFGwEVKRO+j7BaTl+yxdCdd/dRWN1d9ur957eVQYoa9akVeCigaA09UTOF16jUFMqi8bnPOdUIhyGJ+eV7SxGuX5j12Wbfsnuf3E3W+S3NpE0ksvK2am9uU/oehhA+rhI8AV0YsxDYLfj1NzBjsLP7NJZ+tWcrPd1/W9GcEbVqSOcHSvOfkQsOM+NH5Lw7jkb6cPHZidPs5+F+LqvA58yIR6tXRK0JP2rwlTGCCf0nGT8uNU8O3HBz//VqKIIHkF8PdO0P9NzlA9bpuJ7gCo438fYcqCdb4fiCpp7pixApvr9t/RVCpLvYr/ht8lU/m6WC91XDdFQoKJYnDm3UaHAgX/67KwRlU0C72fWOqAU5a/DL9myK1T4ZwyZnmp1rggs/nive8OcXcCyRdbdL182vSd8CfCScXTNfclXvrQa6qlck9MPT9zgvOw7h91LDJz/3D+S5emfPOQM8SUc5De4YW3nKswo7lV4WL+qQCdBDFqGQpeFty/yOq+pxsncvs7sodAp5vnhisuJrPd4mZ4wqsoplR+uu37eKbwbB0ia9MVkIQULaGNZ0YHOS27ycJERCkSAs/qJ+t7lu8p0iJYOA674g7yGSn8mw859hBevVHg16RM3OKMABMp5jCT+fC/1ZKVdoRppxP5qdWr+7ABhedmv7cptAZUqoFKbZVjOkuoZmjt9Rl23FwBxQnRLj9/EKDY8HskVlOfGGBM377U9cp+Oc+dPEq2AERJHg6XkDdVy0m/jINu76JhRtRZf6jaNJC7yrMcXCuwJ0C2aVqGcjx2dTsehHN7n5R743tp1rnSnR2/KXdGRuaZup+M2dZnr7UKSiJdFPNTOnt2eEfaw4MaIZ+fnvXPrBqUAJL6hfu6SEifKlizeGfYnB6ylg19Oi4Z5T27c9jnTU7Mnho38yEdh4kLswW82FniiT6kJhZ7EhXnEC8BlT9GgjJwb3LjwqzOoew2FxVDWoAq6T9/CFcoyemzcFZxqU/lsucBzWljVLc2be435IJBlWOQ9a2v6vRFuNojaDZa0IPBmKVuFnrI1XU0LeAql6X4r19cxi9peBVd0aszzB9y/rYtHucq8G7ZlezT/+VqVH+8z+L23a91LQtpJoK5eGn538TxuRGXM6Rnc7UATRJqd4XueNkebQHaA8vvM90Kt8k8jVV25TirWmHAXiUcrN/taOTskiVau7fGbtPmt+i8XeBJEydGsJDFN134VWDHJNvcC60I8Du/MizGve0JOl53sF/Mf5cnO6HETLHDO/nQ5158mzzb0eNf5lUVZeHzFGw5f5viDpGbeZ5z0laGs5C7NpJnErk2S1SyP0Jr+XDodjbt7lrNjiAddG1T3zeD4z35eVnJvESQQDxTfzJQoIhs8iKdh0fzwrKTT6NQc5E8gbZCtObltom4xKUbZhmRZcDJtzkldcWWL9RqyeAvRXVbqDwQgInHtHZnRUXGJqxdn+b1ZRGQX6Cd+Z8EPxLnFE5DDVAxc2uS1ZD82y2gOMX35ck4uj3tPTad/9+YLsOJPyJruU1xKkik5LB5c1glUpN4N4EusBE55eWCWBcK9bnEo6UdmFwoHnYT2I7vsfoiRfLeS3XftCuul/78H9x6dy3v2D2/LLhCc/pdlORUc77/l+CD8L8yyifZ/ASw/BAk=", # fmt: skip
11
+ "locale/zh_CN/LC_MESSAGES/ruyi.mo": b"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", # fmt: skip
12
12
  "meson-cross.ini.jinja": b"eNptkMFqwzAQRO/6ioUQ0tJazaU9FPoLvfUUglDkNV4iS0IrB4eQf69k2ZRCbmI083Z3NvDDCJbO+Ck2YgMDsnfAmMYATWOiZ246sgi3G1zQXVT0PsH9/jYbq0GSI5BSzoBvxJYXzF6+f8j9ixTicCKnIyEfhYEv2GWaMRmzEyaEVZimWbltG+h8hDNeXyHo1AO5ClS6bSmRd9qqFSgp4cBPz7C9iwzJoQxZiHN4RaJrC7XYtkAd8JXnW7JwOI1kU5PH+FDwecsQsaNp4azWiiqknC+5EH3AmOpdgz6jSt5b02tyam5tuezR17rX/1Xys1b8aHLzN1oces9JDdr05PBYcrmHkrLkxqn0OqpOD2SvaxnRG2TOFdTax4d6GaBd5aRkcSd+ATx1t64=", # fmt: skip
13
- "prompt.venv-created.txt.jinja": b"eNp1kTFvwkAMhff7FV7YStjbqWLqwMZSISSOO4dYJOfIvoRGiP9eXwR0KTedbOv5e8/bBmEkyYNvAZP9OHWYMpBC4gsEQZ8xVs598wCdn8CHTKPVgDIcJ1AeJFA6QTYh3/fCvVBp3+eIE2gQ6k0ylSG3Owli2h8p7VZ7iCQYMsv0Bj5FiPjUN3FKI5+L+EGGiZZ/zUPlroslUA06qTBnWNyc+4RaUJtHbdUL1vRTrPhWGYxtJDUgjHeW/5xX7mt270dPrT+25iTPszW3LV8KTe9z8+4c2LubuV6fILeb2ZrpMEUDLGDbFyHPWIE7VLhQbsDCjtOy8xFhvfFnhMzchsYbbU0tupLQBtUiDcKqc7GCdYPh/MoOzFA1iw2w4oezdaWujwiKhhpEymXNoP5kp02aZQjleFq5Xz21xdY=", # fmt: skip
13
+ "prompt.venv-created.en.txt.jinja": b"eNp1kTFvwkAMhff7FV7YStjbqWLqwMZSISSOO4dYJOfIvoRGiP9eXwR0KTedbOv5e8/bBmEkyYNvAZP9OHWYMpBC4gsEQZ8xVs598wCdn8CHTKPVgDIcJ1AeJFA6QTYh3/fCvVBp3+eIE2gQ6k0ylSG3Owli2h8p7VZ7iCQYMsv0Bj5FiPjUN3FKI5+L+EGGiZZ/zUPlroslUA06qTBnWNyc+4RaUJtHbdUL1vRTrPhWGYxtJDUgjHeW/5xX7mt270dPrT+25iTPszW3LV8KTe9z8+4c2LubuV6fILeb2ZrpMEUDLGDbFyHPWIE7VLhQbsDCjtOy8xFhvfFnhMzchsYbbU0tupLQBtUiDcKqc7GCdYPh/MoOzFA1iw2w4oezdaWujwiKhhpEymXNoP5kp02aZQjleFq5Xz21xdY=", # fmt: skip
14
+ "prompt.venv-created.zh_CN.txt.jinja": b"eNpdkc1O20AUhfd+itmwRDwEa54gyiINk2IR2ZUdoFEUycofTgkmqG0KSapWKEFeFDtARFzbSd6Fzp2xV36FXmNAiFnO3DnnO/cIawaLOzBHEPjg9LjZjy6H/OSXsFy4av4zGpLEGzacuY/GWFcPtCJ9NH6S3EeNUiX/QVZyW3kiRg4svzPvBPpmbDTEsMXXBp8HUWvIx3+SsMeCaXbDbyZv5ZNwFBk96FuoH82a4ptNclVaLqtHee2gKm/u0kKxIh8WKhRtJFQR1wGEBjhPYLWNTSKXiF7VNVWtkI26JMHYfmfBvJsUwL9mno9B4qYtlnfM7zDPgOkPPpgh7YvE1ieNluTPBFXQC/NECxdWrSQcShLB85y6Vnv1rNdTsBSEKrvIkjK8A4jWF9Bpi6WDpsgunFs4vcekqe/2TmGfElhMob2Iv67i9inO8cExCx6S0MxeK6paLu4VZIWU5DJNwi7zLLJDdVWRmD+Bs64IB5F7/vrr6YkUNVXXX37gsrIOMdhbtLSo33+z9nh3BeYMN8sCbGyUyaUD93Z8/AW3yMddtlwjeOTO+YWVFvAf3zNT3Q==", # fmt: skip
14
15
  "ruyi-activate.bash.jinja": b"eNp9lN1u2kAQhe/3KSYGqiSVRUnuqIhEGqRESgLCBClKI2uxx/JKZh2t126o6yfqI/QuT9bxH2CHhBvEzpn1d2YO7sDCFxF4IkBYx5GGFUIcoQu/hPbBiMJYOQgrIfsq3giTO1okXKMBp54K17DikX/KOrAJY3C4lKEGFUsQGlyh0NHBhjEmPHgCo5tejq1r25o+zH9MzMyAEZ19M+D5O2gfJQP6oOOHYDzSZQVL9XSdE0aOEi96CD+79XHefPHlrGx8pUeenzNPMFaAulijwvEJpIWoAwoj1BAGLqBMhArlGqWGhCvBVwFGleqIcM3f0E2X4/lXO4Nn6tOxkhFoFSOQHSoAMbnoBFzRsLgGHgRFO1WrfnJszx8eb+zp7ZU9Gy+uh3QZ+YU9w/knL42MblNrbMv4+hIqXai2Z7HMfTQ7imLuvzQhZMID4eYDoKcV7bQhx8ei7tPewFRwdtF3MenLmOg/xbcGH8Bbgya7NXiPbg0+Jq9qNXhZL8rLyf3y0Jk9m0/vZosa94mAiXVQRUqG0sWIFpWvH1vEHbAw8KAWHLWwTA9a4anZMkYhL0VCKQww4Y3gtDPXpGBsCz9K050T+AO0hixj1aB2tllztzTiMhTVj62wT//MYVXbDwr7LAAHl5/28mHuhnw/vpuA2ctYe+4NB6WstpH2TMAgwsN9RveYXhco+Rphz4JxYpSN0iWA3vth1Psu3yNlMnfFqxtrfHk7qURmO6ONpBFCSl8kYtvsvv2d0+5g/8ryquztHzTke2mmRPwHax2J0Q==", # fmt: skip
16
+ "ruyi-activate.fish.jinja": b"eNqNVF1P2zAUfc+vuLhhwENAG29Im8REJyoBRS1DQtMU3OSWWkrszrGjsY5ftJ+wN37ZbOejcZdW5KX19bnH514f3wHcLVgBc5Yh5LpQMEMohJYJpjCXIjc7xeIMHqsYzBg/kfqZRTRRrKQKj+3+YzCAZ6EhoZwLBVJzYApSJjFR2XMQsDkoNNwkjAnsfQRSsRGI6Dp2TAIwHyYLAQcPhs3Jqc9VVmSRSLZUZxA20YPDQlGlK/mc5ngEn959cDQSlZYcTk8D5GkQzDU3ggUHJz7FRj5EKZDhT6bcBpRMKk0zQG7+CZ4jV0B52rApAVzI3ACKBWYerBI/MMgCFYgs9ThKKhmdZVg4lGmHBUU/IJ58fRjF46uL+Pb87tJt2s/tPv0EG4RwFwj7KFzF2w76MppexreT8fXtXTy+H04mo4vhds6daEPf9LVwh9gexqb22JoiXhr7LFWLtl8HjvAGUNLPCW/i3y3HNslrVl27K/1+eHPfG6x70ba3tjWVT+W3998rI3PBUxOW2noMSXviAKaYzaNmby/oVb1h0Faj0zkAza0kJiVmWFLPWpvW9nUEQeOqthhYrTqL38bU8PKyxvnOgtD5y7MmCdv0EzMZSI0JVvu2N+um3ZxfDyHaf/lfQt1PT0kFb+Ss9iPArMDd+YczWrgJAGtJR1UuT40Wk9tOoehXV3h8MZqef74a1kzNO57S0k4dhESbXnPPcu2FAS0cpl1vt5xn6i5Xf4qX02v3jsR6OtWzUMxdMKOm1ETkOa2N3to5s+MprtFh9Rt0eMdaLbVyJJtvxs7miAN5/TOx4zLcvIfXv0C6VBPTbyF3qFxKLJkw602l7iiCdjKHa7nE2OJ4i1Yh2RPjNDshBk82pW+/GX8AeL7vm35d7xD3Kv8BeY5Dlw==", # fmt: skip
15
17
  "ruyi-cache.toml.jinja": b"eNptUs1uhCAYvPsUX2nMtknjoccmve0e9tK9eDOGsIJK1r8CmhjjuxcUF6uexG+GmWHgFX5u4eULwpxLSHnBQH9LUpGMUbj3INqeB3C+GRpcztfwxfOihCQ5o7j7jL3BB57CLytbfOcV+ONz+Q1oGBwyjkhzWUU13R/tvkbUxhMbEqs6AzjxYINOZmkt4PEBHWjJDR5wxUr59q5VtPFDO9oMnTH3ZnezX+P/k6xFFREZU3Iltkq0gFY/9lRdF0lOeGXOSLlYHKPTFjnFUwo3TguSySP+BFj6XFMXIQfLXoq6VijW0XbTIz0LzYr7O9DiWZJgXklFigLrqJP0ZuaEN8Ch7LPobbtJSXHJFKFEEVyS5rjmHQvZwlHsUSZXpzR/S7PT3WDVNvoRuxpWU9epy/cHatoHPQ==", # fmt: skip
16
18
  "ruyi-venv.toml.jinja": b"eNqtkOFqwyAQx7/7FBIIbWEN7AH2JEHCYUwqbTxRN1ZC3n0atQlpSxnbN/V+3v3uX3NUnewZ0QY7eRH0gxbjSPNtmgoyllR21F6tQXT0WE4knyObb5E9UqFaz3uM1INw0IIDRr6EsRKV//JOQscBuEGqz32Tmb0+zM2N0NjINovUu/SwY/MEDk70aK5LPb8kQMEglmK4pcKikGrpIZWTehQL9nHvrFcXac/GSxcsELf1Kg38DL2wVWIYCRPWyz1pc/Cjw6Als+1UMXxewKEJvI1zPdKhoQ5ML1wDhp/eqKZSPf9VSScGu48BP9DOeBWSWfUNwdzvolfWQaR8tcK3M3Dvv1VeU7PnI9EAsb8rOcQLP4FUv4t1++1Vrjf+X4L9AYyLQa0=", # fmt: skip
17
19
  "toolchain.cmake.jinja": b"eNqFkVFrwjAUhd/7Ky6IMGF274M9dG2cZWlT0joUhJDVaIuajKQTR+l/X6zOWccwb+F+5+Scmx5MjIBNuRaPTs/pQb7lawGu68Lc3g5nGPiR94pYRgj2x14Ys1GI0VNdw07IHdNKVdA0D5VSm7zgpXSPFnOn7g+hXIL5Mi3Tb64MwzjNPIxZQtEonB4Mf9CmOcmFXFiHs9LGchwjqrujQTpLMxSx2IsQ4FJ+7gd/hwklPkpTQsH6f2iVC2OUti9csj7zSZTYVi2V59fj6bQL7PctUfcv+w1tzF/NKIwDRgnJWOJlY+iUa5UX1YzgOi9gaXMVgi+ENsDlwn7Ku+a6FAZKCVUhoOJ6JSqr3JVaya2Q1X1XbfutNN+eBYUyHfzffCwiATrs6oV6EcToDdHBDRiHz9SjMyAxnt1iw9jHkwCd2G+4PsQk", # fmt: skip
@@ -20,8 +22,10 @@ RESOURCES: Final = {
20
22
  TEMPLATE_NAME_MAP: Final = {
21
23
  "binfmt.conf": "binfmt.conf.jinja",
22
24
  "meson-cross.ini": "meson-cross.ini.jinja",
23
- "prompt.venv-created.txt": "prompt.venv-created.txt.jinja",
25
+ "prompt.venv-created.en.txt": "prompt.venv-created.en.txt.jinja",
26
+ "prompt.venv-created.zh_CN.txt": "prompt.venv-created.zh_CN.txt.jinja",
24
27
  "ruyi-activate.bash": "ruyi-activate.bash.jinja",
28
+ "ruyi-activate.fish": "ruyi-activate.fish.jinja",
25
29
  "ruyi-cache.toml": "ruyi-cache.toml.jinja",
26
30
  "ruyi-venv.toml": "ruyi-venv.toml.jinja",
27
31
  "toolchain.cmake": "toolchain.cmake.jinja",
ruyi/ruyipkg/list.py CHANGED
@@ -26,7 +26,7 @@ def do_list(
26
26
  logger.F(_("no filter specified for list operation"))
27
27
  logger.I(
28
28
  _(
29
- "for the old behavior of listing all packages, try [yellow]ruyi list --name-contains ''[/]"
29
+ "for the old behavior of listing all packages, try [yellow]ruyi list --all[/]"
30
30
  )
31
31
  )
32
32
  return 1
ruyi/ruyipkg/list_cli.py CHANGED
@@ -27,6 +27,14 @@ class ListCommand(
27
27
  help=_("Also show details for every package"),
28
28
  )
29
29
 
30
+ p.add_argument(
31
+ "--all",
32
+ action=ListFilterAction,
33
+ nargs=0,
34
+ dest="filters",
35
+ help=_("Match and show all packages"),
36
+ )
37
+
30
38
  # filter expressions
31
39
  p.add_argument(
32
40
  "--is-installed",
@@ -19,6 +19,7 @@ class ListFilterOpKind(enum.Enum):
19
19
  NAME_CONTAINS = 3
20
20
  RELATED_TO_ENTITY = 4
21
21
  IS_INSTALLED = 5
22
+ ALL = 6
22
23
 
23
24
 
24
25
  class ListFilterOp(NamedTuple):
@@ -35,6 +36,8 @@ class ListFilterExecCtx(NamedTuple):
35
36
 
36
37
  def _execute_filter_op(op: ListFilterOp, ctx: ListFilterExecCtx) -> bool:
37
38
  match op.op:
39
+ case ListFilterOpKind.ALL:
40
+ return True
38
41
  case ListFilterOpKind.CATEGORY_CONTAINS:
39
42
  return op.arg in ctx.category
40
43
  case ListFilterOpKind.CATEGORY_IS:
@@ -102,9 +105,9 @@ class ListFilterAction(ArgcompleteAction):
102
105
  help: str | None = None,
103
106
  metavar: str | tuple[str, ...] | None = None,
104
107
  ) -> None:
105
- # for now let's just support unary filter ops
106
- if nargs != 1:
107
- raise ValueError("nargs != 1 not supported")
108
+ # for now let's just support argument-less and unary filter ops
109
+ if nargs not in (None, 0, 1):
110
+ raise ValueError("nargs not supported")
108
111
  if const is not None:
109
112
  raise ValueError("const not supported")
110
113
  if default is not None:
@@ -143,6 +146,8 @@ class ListFilterAction(ArgcompleteAction):
143
146
  self.filter_op_kind = ListFilterOpKind.RELATED_TO_ENTITY
144
147
  case "is-installed":
145
148
  self.filter_op_kind = ListFilterOpKind.IS_INSTALLED
149
+ case "all":
150
+ self.filter_op_kind = ListFilterOpKind.ALL
146
151
  case _:
147
152
  # should never happen
148
153
  self.filter_op_kind = ListFilterOpKind.UNKNOWN
@@ -159,6 +164,11 @@ class ListFilterAction(ArgcompleteAction):
159
164
  dest = ListFilter()
160
165
  setattr(namespace, self.dest, dest)
161
166
 
167
+ if self.filter_op_kind == ListFilterOpKind.ALL:
168
+ # "--all" takes no argument
169
+ dest.append(ListFilterOp(ListFilterOpKind.ALL, ""))
170
+ return
171
+
162
172
  val: str
163
173
  if isinstance(values, str):
164
174
  val = values
ruyi/ruyipkg/profile.py CHANGED
@@ -14,7 +14,8 @@ from typing import (
14
14
  if TYPE_CHECKING:
15
15
  from typing_extensions import NotRequired
16
16
 
17
- from ..pluginhost.ctx import PluginHostContext, SupportsEvalFunction
17
+ from ..pluginhost.ctx import PluginHostContext
18
+ from ..pluginhost.traits import SupportsEvalFunction
18
19
  from .entity_provider import BaseEntityProvider
19
20
  from .pkg_manifest import EmulatorFlavor
20
21
 
ruyi/ruyipkg/repo.py CHANGED
@@ -1,4 +1,5 @@
1
1
  import glob
2
+ from functools import cached_property
2
3
  import itertools
3
4
  import os.path
4
5
  import pathlib
@@ -226,20 +227,18 @@ class MetadataRepo(ProvidesPackageManifests):
226
227
 
227
228
  self._cfg: RepoConfig | None = None
228
229
  self._cfg_initialized = False
229
- self._messages: RepoMessageStore | None = None
230
230
  self._pkgs: dict[str, dict[str, BoundPackageManifest]] = {}
231
231
  self._categories: dict[str, dict[str, dict[str, BoundPackageManifest]]] = {}
232
232
  self._slug_cache: dict[str, BoundPackageManifest] = {}
233
233
  self._supported_arches: set[str] | None = None
234
234
  self._arch_profile_stores: dict[str, ArchProfileStore] = {}
235
235
  self._news_cache: NewsItemStore | None = None
236
- self._entity_store: EntityStore = EntityStore(
236
+ self._plugin_host_ctx = PluginHostContext.new(
237
237
  gc.logger,
238
- FSEntityProvider(gc.logger, pathlib.Path(self.root) / "entities"),
239
- MetadataRepoEntityProvider(self),
240
- ProfileEntityProvider(self),
238
+ self.plugin_root,
239
+ locale=gc.lang_code,
240
+ message_store_factory=lambda: self.messages,
241
241
  )
242
- self._plugin_host_ctx = PluginHostContext.new(gc.logger, self.plugin_root)
243
242
  self._plugin_fn_evaluator = self._plugin_host_ctx.make_evaluator()
244
243
 
245
244
  @property
@@ -379,11 +378,8 @@ class MetadataRepo(ProvidesPackageManifests):
379
378
  self._cfg = RepoConfig.from_object(obj)
380
379
  return self._cfg
381
380
 
382
- @property
381
+ @cached_property
383
382
  def messages(self) -> RepoMessageStore:
384
- if self._messages is not None:
385
- return self._messages
386
-
387
383
  self.ensure_git_repo()
388
384
 
389
385
  obj: dict[str, object] = {}
@@ -393,8 +389,7 @@ class MetadataRepo(ProvidesPackageManifests):
393
389
  except FileNotFoundError:
394
390
  pass
395
391
 
396
- self._messages = RepoMessageStore.from_object(obj)
397
- return self._messages
392
+ return RepoMessageStore.from_object(obj)
398
393
 
399
394
  def iter_pkg_manifests(
400
395
  self,
@@ -590,7 +585,7 @@ class MetadataRepo(ProvidesPackageManifests):
590
585
  )
591
586
  )
592
587
 
593
- def ensure_news_cache(
588
+ def _ensure_news_cache(
594
589
  self,
595
590
  ensure_repo: bool = True,
596
591
  ) -> None:
@@ -629,7 +624,7 @@ class MetadataRepo(ProvidesPackageManifests):
629
624
  ensure_repo: bool = True,
630
625
  ) -> NewsItemStore:
631
626
  if self._news_cache is None:
632
- self.ensure_news_cache(ensure_repo=ensure_repo)
627
+ self._ensure_news_cache(ensure_repo=ensure_repo)
633
628
  assert self._news_cache is not None
634
629
  return self._news_cache
635
630
 
@@ -658,10 +653,15 @@ class MetadataRepo(ProvidesPackageManifests):
658
653
  ret = 1
659
654
  return ret
660
655
 
661
- @property
656
+ @cached_property
662
657
  def entity_store(self) -> EntityStore:
663
658
  """Get the entity store for this repository."""
664
- return self._entity_store
659
+ return EntityStore(
660
+ self.logger,
661
+ FSEntityProvider(self.logger, pathlib.Path(self.root) / "entities"),
662
+ MetadataRepoEntityProvider(self),
663
+ ProfileEntityProvider(self),
664
+ )
665
665
 
666
666
  def get_telemetry_api_url(self, scope: TelemetryScopeConfig) -> str | None:
667
667
  # do not clone the metadata repo if it is absent, in case the user
ruyi/version.py CHANGED
@@ -2,7 +2,7 @@ from typing import Final
2
2
 
3
3
  from .i18n import d_
4
4
 
5
- RUYI_SEMVER: Final = "0.46.0-alpha.20260119"
5
+ RUYI_SEMVER: Final = "0.46.0-beta.20260203"
6
6
  RUYI_USER_AGENT: Final = f"ruyi/{RUYI_SEMVER}"
7
7
 
8
8
  COPYRIGHT_NOTICE: Final = d_(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ruyi
3
- Version: 0.46.0a20260119
3
+ Version: 0.46.0b20260203
4
4
  Summary: Package manager for RuyiSDK
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -11,7 +11,7 @@ ruyi/cli/oobe.py,sha256=Fjb2-7mFFz85Q-xxuxUG2FSjY9_7ADUDHeqWGidolmY,2572
11
11
  ruyi/cli/self_cli.py,sha256=djH51igQ2Ljrh3L2uFx3f31HGhd9iT8UQxp2x6dvXBs,9137
12
12
  ruyi/cli/user_input.py,sha256=t-AYWGHSl7VqyLg82l5cjgkOwj0wyeD_S9h5ZyN3yYg,4513
13
13
  ruyi/cli/version_cli.py,sha256=teCysKc7hQ7ewuV-wAPwO6DQerJQDJoyWVFAEhoxtWE,1394
14
- ruyi/config/__init__.py,sha256=QK8dXWp4Tpr8H_4IKLg3fc3-y5wsvnbFUIiLXd3CXOU,17559
14
+ ruyi/config/__init__.py,sha256=LOZ0a4WdTHGje7OdZ5yoa1sHs3d8TdH92PmNWQeZSw8,17560
15
15
  ruyi/config/editor.py,sha256=piAJ-a68iX6IFWXy1g9OXoSs_3DardZwoaSPdStKKL0,4243
16
16
  ruyi/config/errors.py,sha256=VH1bhEkddmqkEqbFDgR-Sqp4_OIz6pB4QUTeLRGuQmk,2888
17
17
  ruyi/config/news.py,sha256=83LjQjJHsqOPdRrytG7VBFubG6pyDwJ-Mg37gpBRU20,1061
@@ -25,19 +25,20 @@ ruyi/mux/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
25
  ruyi/mux/runtime.py,sha256=7dK55D57c1O8hVRy6fEo4VWa4SbjDHoNYPqFd6YxmgA,7469
26
26
  ruyi/mux/venv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  ruyi/mux/venv/emulator_cfg.py,sha256=vGw-pBtNii2fTllQqloN_o1FAFOOHgF7zDqLMVdIlzk,1125
28
- ruyi/mux/venv/maker.py,sha256=lazlr7XsZV75a4TAJG-QtDw6Mlk4_X6TOzQtH979qNk,30482
28
+ ruyi/mux/venv/maker.py,sha256=F5t2V6SWQXb9qQib7FvQlvgqaDbAW-ygYtIsz2B4ssc,30786
29
29
  ruyi/mux/venv/venv_cli.py,sha256=LL2nmRsqzeFVe8KoXiJl82uTBkemr2X1yX3oooI5RBk,3076
30
30
  ruyi/mux/venv_cfg.py,sha256=m75JCVLFWE1gE8OzcNDOHqwUc2c6ikJhZ-GhjsXv94U,6840
31
31
  ruyi/pluginhost/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- ruyi/pluginhost/api.py,sha256=Zh69xJfR7PEbM6fjoFZRNqeqTneWAmC71NjA76HodSY,5711
33
- ruyi/pluginhost/ctx.py,sha256=MsP1L7nchnbSrauId3GaQzv0YJLnWE0u_H3ZFEmjUX8,6590
32
+ ruyi/pluginhost/api.py,sha256=h8bK7ZSSvkb8BSiznjzMxruu5d04Zq5L7rHeXUUXxuk,6913
33
+ ruyi/pluginhost/ctx.py,sha256=6B2hPhMhed_7ISV23j219e8G_VOmNJICg-FRAaWJyNs,7300
34
34
  ruyi/pluginhost/paths.py,sha256=3EVY3_i3LLff4Lk9py-E317C7_ysiRatfCiuxvCsVWw,4227
35
35
  ruyi/pluginhost/plugin_cli.py,sha256=Mdw3JYfdDuKLgxnE7Ca7PA-iCdXupqAl8E58nLL9wbk,998
36
+ ruyi/pluginhost/traits.py,sha256=mwNHr40KbwKGqUa2a9Ds0yBaPhz3iVaRDFiFcW9fFeg,587
36
37
  ruyi/pluginhost/unsandboxed.py,sha256=A9T-6JFfDNiCAxq47_EhLo_rRmZ3Iyrod3teMWv3-XM,7122
37
38
  ruyi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
39
  ruyi/resource_bundle/__init__.py,sha256=AQonNhDlWGWSFSgcuw74Z296umGe5ojc2gkDYvw3Rqw,900
39
40
  ruyi/resource_bundle/__main__.py,sha256=F3M-c9nzeI9Yimnn-qCbLKITAzjPYI8mtR-SvjNayrs,1659
40
- ruyi/resource_bundle/data.py,sha256=Wr7Mkc8XjrozKZPdHrPJwScrpcMfblbdq5h6VHn95LQ,33978
41
+ ruyi/resource_bundle/data.py,sha256=QpraNgsH7SmmFliYpp8T_blBcd5lpu_FmuPZ8IDGiTg,35732
41
42
  ruyi/ruyipkg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
43
  ruyi/ruyipkg/admin_checksum.py,sha256=l-YFbSHUBFM-_Gzv0PnSfk9Xv4Srpb0Vd38SrrpA1y0,2331
43
44
  ruyi/ruyipkg/admin_cli.py,sha256=ynlkybso9BH6-HLUjgapBI8Gv_y1pXOn7B4ecaUGWq0,2512
@@ -54,18 +55,18 @@ ruyi/ruyipkg/fetcher.py,sha256=SWInsI_aQ2Wv1O_9YJEF1BcAxbb24m4UJwwt5maPl2s,9803
54
55
  ruyi/ruyipkg/host.py,sha256=pmqgggi7koDCWgzFexwHpycv4SZ07VF6xUbi4s8FSKA,1399
55
56
  ruyi/ruyipkg/install.py,sha256=oLMZgW2Lh3b4Odcx-dNE0BEds9oJzlktm83sr8RHbOw,20345
56
57
  ruyi/ruyipkg/install_cli.py,sha256=jUoM6mGGDJKSfjv7GhhE5C1rO-IVvMP2nUESZdWiscM,5363
57
- ruyi/ruyipkg/list.py,sha256=qxzJIe02rqnA9ngYsfNeqUbYgWba9rzprqk4ScF-YwI,4535
58
- ruyi/ruyipkg/list_cli.py,sha256=tXpsMEZt0ntOSpuybv534VR4ZDIbbV0PS_A01Z5Lj-4,2345
59
- ruyi/ruyipkg/list_filter.py,sha256=F64_UhwUEiaUR73EkLu91qoUBA-Yz9mEVWj8XY46MXQ,5467
58
+ ruyi/ruyipkg/list.py,sha256=V8XqFCaS3tGlGSxEuRapFWQ7GLJpLKL5IdinBnlyoh4,4522
59
+ ruyi/ruyipkg/list_cli.py,sha256=9B0BXnlaWOPqj_aovW44_3oAjhfvvdUeqEy8LuFmVHk,2538
60
+ ruyi/ruyipkg/list_filter.py,sha256=fc9xb2eqECLiCuEytrz3l6EDLVnwgjkMZPWQAqvM4OQ,5829
60
61
  ruyi/ruyipkg/msg.py,sha256=d9uF1rBmdT8iVvpTU53XXtNTJzvNhIK68rO-4W4h5wc,3180
61
62
  ruyi/ruyipkg/news.py,sha256=kqU8Ci9D9fcUMTd-yGGBwP9kJ3NCznw76Sc24V7xn6g,4223
62
63
  ruyi/ruyipkg/news_cli.py,sha256=Z4rS30RRG1fnEGKFTYJcxeKNMvIjei4vyPeYNdkuRn8,2434
63
64
  ruyi/ruyipkg/news_store.py,sha256=ocTO4YDpL_HrKaIRFvJ_Gxvpmr7V7-R8b1B8f5Eue9c,5276
64
65
  ruyi/ruyipkg/pkg_manifest.py,sha256=FmksKjQyBnU4zA3MFXiHdB2EjNmhs-J9km9vE-zBQlk,18836
65
- ruyi/ruyipkg/profile.py,sha256=6xwL24crALShqD8bazGOIAFTYCpM_91mD8d6YMxM2FU,10762
66
+ ruyi/ruyipkg/profile.py,sha256=MJ4GHe9qKPYvgsWt7IEueR-MV6hizOz0CsUHeCiHHVM,10793
66
67
  ruyi/ruyipkg/profile_cli.py,sha256=GR-f0PKFRz0BzHvPq-Vii4qGGQ31RqYdUbs7pkvWOAc,1038
67
68
  ruyi/ruyipkg/protocols.py,sha256=lPKRaAcK3DY3wmkyO2tKpFvPQ_4QA4aSNNsNLvi78O8,1833
68
- ruyi/ruyipkg/repo.py,sha256=OqDH0GDGPXxFFyP18dO-ZfFQVAuHKwTdmT9joEwIXzM,25634
69
+ ruyi/ruyipkg/repo.py,sha256=QG8ibx8PpsbPuV8aguvxVpyK7ZNSXOOGwmG-B0urMk8,25587
69
70
  ruyi/ruyipkg/state.py,sha256=Ie4vrt79Wp9P0L36tMj36tOtDlFnIb6uwVGDQCQyg8s,11544
70
71
  ruyi/ruyipkg/unpack.py,sha256=XS1pB2ahGXjSRE0ViOQKfjStrgDISf6WGlMzR-USD9U,11991
71
72
  ruyi/ruyipkg/unpack_method.py,sha256=qJdZXB7OhLLuXhgejZDpiqK2BqMvxxcLJaMWCkc0G0Y,2179
@@ -95,9 +96,9 @@ ruyi/utils/templating.py,sha256=94xBJTkIfDqmUBTc9hnLO54zQoC7hwGWONGF3YbaqHk,966
95
96
  ruyi/utils/toml.py,sha256=aniIF3SGfR69_s3GWWwlnoKxW4B5IDVY2CM0eUI55_c,3501
96
97
  ruyi/utils/url.py,sha256=Wyct6syS4GmZC6mY7SK-YgBWxKl3cOOBXtp9UtvGkto,186
97
98
  ruyi/utils/xdg_basedir.py,sha256=RwVH199jPcLVsg5ngR62RaNS5hqnMpkdt31LqkCfa1g,2751
98
- ruyi/version.py,sha256=xtTOvkZhXFvST6_hX7qp7QdNLGx3pd44LDy564qrtBg,652
99
- ruyi-0.46.0a20260119.dist-info/METADATA,sha256=-zwGbh1VHK9g6ZI3BgXVRoWHmC2IbCPzPIXJeqPkrjU,24490
100
- ruyi-0.46.0a20260119.dist-info/WHEEL,sha256=3ny-bZhpXrU6vSQ1UPG34FoxZBp3lVcvK0LkgUz6VLk,88
101
- ruyi-0.46.0a20260119.dist-info/entry_points.txt,sha256=GXSNSy7OgFrnlU5xm5dE3l3PGO92Qf6VDIUCdvQNm8E,49
102
- ruyi-0.46.0a20260119.dist-info/licenses/LICENSE-Apache.txt,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
103
- ruyi-0.46.0a20260119.dist-info/RECORD,,
99
+ ruyi/version.py,sha256=_yfWtgYMY1hHWGa60RTsX0lRJC8Mo8EwRkJl39WrboU,651
100
+ ruyi-0.46.0b20260203.dist-info/METADATA,sha256=vz0IvkY87pZVfYXvH4Z53cwEfuGk8UHWcXFpgqv09WI,24490
101
+ ruyi-0.46.0b20260203.dist-info/WHEEL,sha256=kJCRJT_g0adfAJzTx2GUMmS80rTJIVHRCfG0DQgLq3o,88
102
+ ruyi-0.46.0b20260203.dist-info/entry_points.txt,sha256=GXSNSy7OgFrnlU5xm5dE3l3PGO92Qf6VDIUCdvQNm8E,49
103
+ ruyi-0.46.0b20260203.dist-info/licenses/LICENSE-Apache.txt,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
104
+ ruyi-0.46.0b20260203.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.3.0
2
+ Generator: poetry-core 2.3.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any