tonable 0.5.2__tar.gz
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.
- tonable-0.5.2/.gitignore +39 -0
- tonable-0.5.2/LICENSE +21 -0
- tonable-0.5.2/PKG-INFO +229 -0
- tonable-0.5.2/README.md +207 -0
- tonable-0.5.2/THIRD_PARTY_NOTICES.md +75 -0
- tonable-0.5.2/assets/tonable-logo.svg +5 -0
- tonable-0.5.2/docs/clients.md +144 -0
- tonable-0.5.2/docs/plan.md +107 -0
- tonable-0.5.2/docs/publishing.md +139 -0
- tonable-0.5.2/docs/tools.md +159 -0
- tonable-0.5.2/probe/README.md +88 -0
- tonable-0.5.2/probe/TonableProbe/__init__.py +766 -0
- tonable-0.5.2/probe/install.py +50 -0
- tonable-0.5.2/probe/install.sh +6 -0
- tonable-0.5.2/pyproject.toml +74 -0
- tonable-0.5.2/remote_script/Tonable/__init__.py +146 -0
- tonable-0.5.2/remote_script/Tonable/arrangement.py +236 -0
- tonable-0.5.2/remote_script/Tonable/clips.py +364 -0
- tonable-0.5.2/remote_script/Tonable/devices.py +188 -0
- tonable-0.5.2/remote_script/Tonable/dispatch.py +160 -0
- tonable-0.5.2/remote_script/Tonable/edit.py +281 -0
- tonable-0.5.2/remote_script/Tonable/envelopes.py +195 -0
- tonable-0.5.2/remote_script/Tonable/library.py +300 -0
- tonable-0.5.2/remote_script/Tonable/objects.py +134 -0
- tonable-0.5.2/remote_script/Tonable/params.py +170 -0
- tonable-0.5.2/remote_script/Tonable/reading.py +289 -0
- tonable-0.5.2/remote_script/Tonable/server.py +347 -0
- tonable-0.5.2/remote_script/Tonable/song.py +304 -0
- tonable-0.5.2/remote_script/Tonable/version.py +2 -0
- tonable-0.5.2/scripts/check_distribution.py +215 -0
- tonable-0.5.2/scripts/check_registry.py +95 -0
- tonable-0.5.2/scripts/check_release.py +24 -0
- tonable-0.5.2/scripts/check_sdist.py +45 -0
- tonable-0.5.2/scripts/github_release.py +77 -0
- tonable-0.5.2/src/tonable/__init__.py +5 -0
- tonable-0.5.2/src/tonable/__main__.py +77 -0
- tonable-0.5.2/src/tonable/bridge.py +208 -0
- tonable-0.5.2/src/tonable/cli.py +353 -0
- tonable-0.5.2/src/tonable/presets.py +119 -0
- tonable-0.5.2/src/tonable/server.py +78 -0
- tonable-0.5.2/src/tonable/tools/__init__.py +144 -0
- tonable-0.5.2/src/tonable/tools/arrangement.py +62 -0
- tonable-0.5.2/src/tonable/tools/batch.py +53 -0
- tonable-0.5.2/src/tonable/tools/clips.py +179 -0
- tonable-0.5.2/src/tonable/tools/devices.py +207 -0
- tonable-0.5.2/src/tonable/tools/envelopes.py +76 -0
- tonable-0.5.2/src/tonable/tools/session.py +163 -0
- tonable-0.5.2/src/tonable/tools/tracks.py +129 -0
- tonable-0.5.2/tests/fake_live.py +291 -0
- tonable-0.5.2/tests/manual_checklist.md +50 -0
- tonable-0.5.2/tests/test_bridge.py +250 -0
- tonable-0.5.2/tests/test_cli.py +255 -0
- tonable-0.5.2/tests/test_clips.py +130 -0
- tonable-0.5.2/tests/test_package.py +18 -0
- tonable-0.5.2/tests/test_probe.py +109 -0
- tonable-0.5.2/tests/test_probe_install.py +55 -0
- tonable-0.5.2/tests/test_reading.py +221 -0
- tonable-0.5.2/tests/test_release.py +117 -0
- tonable-0.5.2/tests/test_stdio.py +36 -0
- tonable-0.5.2/tests/test_tools_schema.py +88 -0
- tonable-0.5.2/tests/test_writing.py +314 -0
- tonable-0.5.2/uv.lock +879 -0
tonable-0.5.2/.gitignore
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
.DS_Store
|
|
2
|
+
local/
|
|
3
|
+
.venv/
|
|
4
|
+
__pycache__/
|
|
5
|
+
.pytest_cache/
|
|
6
|
+
.ruff_cache/
|
|
7
|
+
dist/
|
|
8
|
+
|
|
9
|
+
# Python build and coverage artifacts
|
|
10
|
+
build/
|
|
11
|
+
*.egg-info/
|
|
12
|
+
*.py[cod]
|
|
13
|
+
.coverage
|
|
14
|
+
.coverage.*
|
|
15
|
+
htmlcov/
|
|
16
|
+
coverage.xml
|
|
17
|
+
|
|
18
|
+
# Local credentials, runtime discovery and diagnostic output
|
|
19
|
+
.env
|
|
20
|
+
.env.*
|
|
21
|
+
!.env.example
|
|
22
|
+
.tonable/
|
|
23
|
+
session.json
|
|
24
|
+
probe-report*.json
|
|
25
|
+
*.log
|
|
26
|
+
*.pem
|
|
27
|
+
*.key
|
|
28
|
+
|
|
29
|
+
# Machine-specific assistant configuration
|
|
30
|
+
.mcp.json
|
|
31
|
+
.codex/
|
|
32
|
+
.claude/
|
|
33
|
+
|
|
34
|
+
# Local Ableton projects and licensed content
|
|
35
|
+
*.als
|
|
36
|
+
*.alc
|
|
37
|
+
*.adg
|
|
38
|
+
*.adv
|
|
39
|
+
*.alp
|
tonable-0.5.2/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ilya Amursky
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
tonable-0.5.2/PKG-INFO
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: tonable
|
|
3
|
+
Version: 0.5.2
|
|
4
|
+
Summary: MCP server for Ableton Live 12: presets, devices, clips, envelopes and scenes
|
|
5
|
+
Project-URL: Source, https://github.com/iamursky/tonable
|
|
6
|
+
Project-URL: Issues, https://github.com/iamursky/tonable/issues
|
|
7
|
+
Project-URL: Releases, https://github.com/iamursky/tonable/releases
|
|
8
|
+
Author: Ilya Amursky
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
License-File: THIRD_PARTY_NOTICES.md
|
|
12
|
+
Keywords: ableton-live,automation,mcp,midi,music
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Operating System :: MacOS :: MacOS X
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
18
|
+
Classifier: Topic :: Multimedia :: Sound/Audio :: MIDI
|
|
19
|
+
Requires-Python: >=3.11
|
|
20
|
+
Requires-Dist: mcp<2,>=1.20
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
|
|
23
|
+
# Tonable
|
|
24
|
+
|
|
25
|
+

|
|
26
|
+
|
|
27
|
+
Tonable connects a local MCP assistant to **Ableton Live 12.4+**. Read a Live Set,
|
|
28
|
+
load devices and presets, write MIDI notes, shape automation and arrange scenes
|
|
29
|
+
through 24 tools. Tonable runs on your Mac: the assistant starts an MCP server over
|
|
30
|
+
stdio, and a Remote Script executes commands inside Live.
|
|
31
|
+
|
|
32
|
+
Version **0.5.2**. Earlier development runs exercised the tools in Live **12.4.16**;
|
|
33
|
+
see the [manual checklist](https://github.com/iamursky/tonable/blob/v0.5.2/tests/manual_checklist.md) for checks to repeat on your
|
|
34
|
+
installation. Tonable is an independent project, unaffiliated with Ableton AG.
|
|
35
|
+
|
|
36
|
+
## What you can do
|
|
37
|
+
|
|
38
|
+
- Inspect tracks, rack chains, Drum Rack pads, parameters, clips and scenes.
|
|
39
|
+
- Search Core Library, Packs and User Library; load devices and presets.
|
|
40
|
+
- Change mixer settings, routing, device parameters and rack macros.
|
|
41
|
+
- Create and edit Session MIDI clips; transpose, shift and quantize notes.
|
|
42
|
+
- Read and write Session automation, including ramps, jumps and curves.
|
|
43
|
+
- Copy clips or entire scenes to Arrangement; create timeline clips and locators.
|
|
44
|
+
- Group edits into one undo step with `batch`; inspect `.adg` and `.adv` files
|
|
45
|
+
without opening Live.
|
|
46
|
+
|
|
47
|
+
See the [tool reference and examples](https://github.com/iamursky/tonable/blob/v0.5.2/docs/tools.md) for addresses, arguments and
|
|
48
|
+
limitations.
|
|
49
|
+
|
|
50
|
+
## Requirements
|
|
51
|
+
|
|
52
|
+
- **macOS** for the validated Live workflow. The installer recognizes macOS and
|
|
53
|
+
Windows library locations and accepts an explicit path on any OS. Windows
|
|
54
|
+
discovery is unit-tested; end-to-end Live support on Windows is unverified.
|
|
55
|
+
Preset discovery still uses macOS Core Library paths.
|
|
56
|
+
- **Ableton Live 12.4 or newer**, installed and started at least once. Devices and
|
|
57
|
+
presets must be available in your Live edition and installed packs. Max for Live
|
|
58
|
+
is only needed for devices that require it.
|
|
59
|
+
- [uv](https://docs.astral.sh/uv/) with Python **3.11+**. The commands below ask uv
|
|
60
|
+
to provide Python 3.11 if needed; no separate Python setup is required.
|
|
61
|
+
- A local MCP client that can launch a **stdio** process under the same macOS user
|
|
62
|
+
as Live. Client accounts and subscriptions are separate from Tonable.
|
|
63
|
+
|
|
64
|
+
## Install without a checkout
|
|
65
|
+
|
|
66
|
+
Get the wheel, source archive and SHA-256 checksums from the
|
|
67
|
+
[GitHub release](https://github.com/iamursky/tonable/releases/tag/v0.5.2).
|
|
68
|
+
CI builds and checks each release before publishing its files. You can run the
|
|
69
|
+
versioned wheel URL directly, without cloning the repository:
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
```sh
|
|
73
|
+
uvx --python 3.11 --from https://github.com/iamursky/tonable/releases/download/v0.5.2/tonable-0.5.2-py3-none-any.whl tonable libraries
|
|
74
|
+
uvx --python 3.11 --from https://github.com/iamursky/tonable/releases/download/v0.5.2/tonable-0.5.2-py3-none-any.whl tonable install
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
The installer lists existing libraries found in Live's preferences. If there are
|
|
78
|
+
several, select one; then confirm the displayed path. It only offers the existing
|
|
79
|
+
OS default when no configured path is known. An unavailable configured path is
|
|
80
|
+
reported; reconnect its drive or pass a verified path explicitly. The installer
|
|
81
|
+
never creates a guessed library. In unattended use, supply `--user-library PATH`; `--yes` can confirm a
|
|
82
|
+
single detected candidate but cannot resolve ambiguity.
|
|
83
|
+
|
|
84
|
+
To check a specific destination before copying, use the **User Library root**
|
|
85
|
+
from Live's **Settings → Library**, not the `Remote Scripts` folder:
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
uvx --python 3.11 --from https://github.com/iamursky/tonable/releases/download/v0.5.2/tonable-0.5.2-py3-none-any.whl tonable install \
|
|
89
|
+
--user-library "/path/to/User Library" --dry-run
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Remove `--dry-run` to install. An explicit path can create a new library folder,
|
|
93
|
+
which is also useful for staging. Files are copied from the package into
|
|
94
|
+
`<User Library>/Remote Scripts/Tonable`. Existing Tonable files require
|
|
95
|
+
`--replace`; other Remote Scripts stay in place. Symlinked script destinations
|
|
96
|
+
are refused. Copying is staged before replacement. The installer does not change
|
|
97
|
+
Live preferences, select a Control Surface or contact Live unless you add
|
|
98
|
+
`--reload`. Close Live before replacing a component for a release check.
|
|
99
|
+
|
|
100
|
+
1. Restart Live after installing.
|
|
101
|
+
2. Open **Settings → Link, Tempo & MIDI → Control Surface** and choose **Tonable**.
|
|
102
|
+
Leave Input and Output set to **None**.
|
|
103
|
+
3. Run `tonable doctor` using the persistent install below, or run `doctor` through
|
|
104
|
+
the same `uvx --from ... tonable` command. For a custom library, pass
|
|
105
|
+
`--user-library "/path/to/User Library"`. All checks should show `OK`.
|
|
106
|
+
|
|
107
|
+
For a persistent CLI, independent of both the checkout and the wheel's location:
|
|
108
|
+
|
|
109
|
+
```sh
|
|
110
|
+
uv tool install --python 3.11 https://github.com/iamursky/tonable/releases/download/v0.5.2/tonable-0.5.2-py3-none-any.whl
|
|
111
|
+
uv tool dir --bin
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Use the `tonable` executable in that bin directory for setup and client commands.
|
|
115
|
+
You can replace the URL with an absolute path to a downloaded wheel. For `uvx`,
|
|
116
|
+
keep a local wheel at the configured path: its environment may need to be rebuilt.
|
|
117
|
+
See the [official uv tools guide](https://docs.astral.sh/uv/guides/tools/) for tool
|
|
118
|
+
isolation.
|
|
119
|
+
|
|
120
|
+
PyPI publication uses a separate Trusted Publishing job. Once version 0.5.2 is
|
|
121
|
+
listed on [the project's PyPI page](https://pypi.org/project/tonable/0.5.2/), you
|
|
122
|
+
can use a pinned registry source:
|
|
123
|
+
|
|
124
|
+
```sh
|
|
125
|
+
uvx --python 3.11 --from 'tonable==0.5.2' tonable install
|
|
126
|
+
uvx --python 3.11 --from 'tonable==0.5.2' tonable serve
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
The release workflow verifies the registry upload, file hashes and tool discovery.
|
|
130
|
+
If PyPI publication has not succeeded, use the GitHub wheel URL above.
|
|
131
|
+
|
|
132
|
+
### Install from source for development
|
|
133
|
+
|
|
134
|
+
```sh
|
|
135
|
+
uv sync --locked
|
|
136
|
+
uv run tonable install --dry-run
|
|
137
|
+
uv run tonable install
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Connect an assistant
|
|
141
|
+
|
|
142
|
+
Tonable exposes MCP over **stdio only**. Use the local setup for your client:
|
|
143
|
+
|
|
144
|
+
- [Codex CLI and IDE extension](https://github.com/iamursky/tonable/blob/v0.5.2/docs/clients.md#codex)
|
|
145
|
+
- [Claude Code](https://github.com/iamursky/tonable/blob/v0.5.2/docs/clients.md#claude-code)
|
|
146
|
+
- [Claude Desktop](https://github.com/iamursky/tonable/blob/v0.5.2/docs/clients.md#claude-desktop)
|
|
147
|
+
- [Other local MCP clients](https://github.com/iamursky/tonable/blob/v0.5.2/docs/clients.md#other-local-mcp-clients)
|
|
148
|
+
|
|
149
|
+
The examples follow official client documentation. They describe a compatible
|
|
150
|
+
transport; they do not certify every client version. Tonable has no HTTP/SSE
|
|
151
|
+
endpoint or hosted connector. The private loopback socket inside Live is not an
|
|
152
|
+
MCP URL. See [client setup](https://github.com/iamursky/tonable/blob/v0.5.2/docs/clients.md) for sources and verification steps.
|
|
153
|
+
|
|
154
|
+
Start with a read-only request:
|
|
155
|
+
|
|
156
|
+
> Use Tonable to check the Live connection and summarize the open Set. Do not edit it.
|
|
157
|
+
|
|
158
|
+
For an editing example, use a disposable empty Set:
|
|
159
|
+
|
|
160
|
+
> Create a MIDI track called Sketch. Add a four-bar Session clip with C3, E3 and G3
|
|
161
|
+
> on its first beat. Read the clip back and report any rejected notes. Do not start playback.
|
|
162
|
+
|
|
163
|
+
A MIDI clip needs an instrument before it produces sound. Ask the assistant to
|
|
164
|
+
read the current addresses before editing; track and device indices can change.
|
|
165
|
+
|
|
166
|
+
## Updates and removal
|
|
167
|
+
|
|
168
|
+
Obtain the new trusted wheel, close Live, and replace the persistent package:
|
|
169
|
+
|
|
170
|
+
```sh
|
|
171
|
+
uv tool install --force --python 3.11 /absolute/path/to/new-tonable.whl
|
|
172
|
+
tonable install --replace
|
|
173
|
+
tonable doctor
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Restart Live before running `doctor`, then reconnect the MCP server so the client
|
|
177
|
+
refreshes its tools. For an existing component from 0.3.0 onward,
|
|
178
|
+
`tonable install --replace --reload` can request a command-module reload. It does
|
|
179
|
+
not replace a restart for socket-layer changes or a failed reload. With a `uvx`
|
|
180
|
+
client configuration, update its wheel path as well.
|
|
181
|
+
|
|
182
|
+
To remove the component, run `tonable uninstall`, confirm the library and removal,
|
|
183
|
+
then set its Control Surface slot to **None** and remove the MCP client entry.
|
|
184
|
+
For unattended removal, use `tonable uninstall --user-library PATH --yes`.
|
|
185
|
+
`--dry-run` previews removal. To remove the persistent CLI, use
|
|
186
|
+
`uv tool uninstall tonable`. Runtime reports and `~/.tonable` are left in place.
|
|
187
|
+
|
|
188
|
+
## Data and editing behavior
|
|
189
|
+
|
|
190
|
+
The Remote Script binds only to `127.0.0.1` on an OS-assigned port. It generates a
|
|
191
|
+
random access key and writes `~/.tonable/session.json` with owner-only permissions.
|
|
192
|
+
Tonable itself has no hosted service and requires no API key. Your MCP client may
|
|
193
|
+
send tool results, including Set names and preset paths, to its model provider.
|
|
194
|
+
Never share the session file or commit local reports without reviewing them.
|
|
195
|
+
|
|
196
|
+
Edits use Live's shared undo history. `batch` groups changes into one step but is
|
|
197
|
+
not a transaction: successful actions remain applied if another action fails.
|
|
198
|
+
After a timeout or lost connection, read the state before retrying an edit.
|
|
199
|
+
Saving Sets, exporting audio and freezing tracks are outside Tonable's API.
|
|
200
|
+
|
|
201
|
+
## Development
|
|
202
|
+
|
|
203
|
+
```sh
|
|
204
|
+
uv sync --locked
|
|
205
|
+
uv run pytest
|
|
206
|
+
uv run ruff check .
|
|
207
|
+
uv run ruff format --check .
|
|
208
|
+
uv build
|
|
209
|
+
uv run python scripts/check_distribution.py \
|
|
210
|
+
--wheel dist/tonable-0.5.2-py3-none-any.whl \
|
|
211
|
+
--sdist dist/tonable-0.5.2.tar.gz --python 3.11
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Tests use a fake Live API and local loopback sockets. They do not prove audio
|
|
215
|
+
quality or replace [checks inside Live](https://github.com/iamursky/tonable/blob/v0.5.2/tests/manual_checklist.md). The optional
|
|
216
|
+
[Live API probe](https://github.com/iamursky/tonable/blob/v0.5.2/probe/README.md) is developer diagnostics; normal installation
|
|
217
|
+
does not need it and the installed wheel excludes it.
|
|
218
|
+
|
|
219
|
+
See [architecture](https://github.com/iamursky/tonable/blob/v0.5.2/docs/plan.md) and [publication checks](https://github.com/iamursky/tonable/blob/v0.5.2/docs/publishing.md).
|
|
220
|
+
|
|
221
|
+
## Acknowledgments and license
|
|
222
|
+
|
|
223
|
+
Tonable draws on techniques from
|
|
224
|
+
[ableton-live-mcp](https://github.com/wstierhout/ableton-live-mcp) and
|
|
225
|
+
[Producer Pal](https://github.com/adamjmurray/producer-pal). Attribution and their
|
|
226
|
+
MIT notices are in [THIRD_PARTY_NOTICES.md](https://github.com/iamursky/tonable/blob/v0.5.2/THIRD_PARTY_NOTICES.md).
|
|
227
|
+
|
|
228
|
+
Tonable is licensed under [MIT](https://github.com/iamursky/tonable/blob/v0.5.2/LICENSE), © 2026 Ilya Amursky. Ableton software and
|
|
229
|
+
content are not included and remain subject to their own licenses.
|
tonable-0.5.2/README.md
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# Tonable
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
Tonable connects a local MCP assistant to **Ableton Live 12.4+**. Read a Live Set,
|
|
6
|
+
load devices and presets, write MIDI notes, shape automation and arrange scenes
|
|
7
|
+
through 24 tools. Tonable runs on your Mac: the assistant starts an MCP server over
|
|
8
|
+
stdio, and a Remote Script executes commands inside Live.
|
|
9
|
+
|
|
10
|
+
Version **0.5.2**. Earlier development runs exercised the tools in Live **12.4.16**;
|
|
11
|
+
see the [manual checklist](https://github.com/iamursky/tonable/blob/v0.5.2/tests/manual_checklist.md) for checks to repeat on your
|
|
12
|
+
installation. Tonable is an independent project, unaffiliated with Ableton AG.
|
|
13
|
+
|
|
14
|
+
## What you can do
|
|
15
|
+
|
|
16
|
+
- Inspect tracks, rack chains, Drum Rack pads, parameters, clips and scenes.
|
|
17
|
+
- Search Core Library, Packs and User Library; load devices and presets.
|
|
18
|
+
- Change mixer settings, routing, device parameters and rack macros.
|
|
19
|
+
- Create and edit Session MIDI clips; transpose, shift and quantize notes.
|
|
20
|
+
- Read and write Session automation, including ramps, jumps and curves.
|
|
21
|
+
- Copy clips or entire scenes to Arrangement; create timeline clips and locators.
|
|
22
|
+
- Group edits into one undo step with `batch`; inspect `.adg` and `.adv` files
|
|
23
|
+
without opening Live.
|
|
24
|
+
|
|
25
|
+
See the [tool reference and examples](https://github.com/iamursky/tonable/blob/v0.5.2/docs/tools.md) for addresses, arguments and
|
|
26
|
+
limitations.
|
|
27
|
+
|
|
28
|
+
## Requirements
|
|
29
|
+
|
|
30
|
+
- **macOS** for the validated Live workflow. The installer recognizes macOS and
|
|
31
|
+
Windows library locations and accepts an explicit path on any OS. Windows
|
|
32
|
+
discovery is unit-tested; end-to-end Live support on Windows is unverified.
|
|
33
|
+
Preset discovery still uses macOS Core Library paths.
|
|
34
|
+
- **Ableton Live 12.4 or newer**, installed and started at least once. Devices and
|
|
35
|
+
presets must be available in your Live edition and installed packs. Max for Live
|
|
36
|
+
is only needed for devices that require it.
|
|
37
|
+
- [uv](https://docs.astral.sh/uv/) with Python **3.11+**. The commands below ask uv
|
|
38
|
+
to provide Python 3.11 if needed; no separate Python setup is required.
|
|
39
|
+
- A local MCP client that can launch a **stdio** process under the same macOS user
|
|
40
|
+
as Live. Client accounts and subscriptions are separate from Tonable.
|
|
41
|
+
|
|
42
|
+
## Install without a checkout
|
|
43
|
+
|
|
44
|
+
Get the wheel, source archive and SHA-256 checksums from the
|
|
45
|
+
[GitHub release](https://github.com/iamursky/tonable/releases/tag/v0.5.2).
|
|
46
|
+
CI builds and checks each release before publishing its files. You can run the
|
|
47
|
+
versioned wheel URL directly, without cloning the repository:
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
uvx --python 3.11 --from https://github.com/iamursky/tonable/releases/download/v0.5.2/tonable-0.5.2-py3-none-any.whl tonable libraries
|
|
52
|
+
uvx --python 3.11 --from https://github.com/iamursky/tonable/releases/download/v0.5.2/tonable-0.5.2-py3-none-any.whl tonable install
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
The installer lists existing libraries found in Live's preferences. If there are
|
|
56
|
+
several, select one; then confirm the displayed path. It only offers the existing
|
|
57
|
+
OS default when no configured path is known. An unavailable configured path is
|
|
58
|
+
reported; reconnect its drive or pass a verified path explicitly. The installer
|
|
59
|
+
never creates a guessed library. In unattended use, supply `--user-library PATH`; `--yes` can confirm a
|
|
60
|
+
single detected candidate but cannot resolve ambiguity.
|
|
61
|
+
|
|
62
|
+
To check a specific destination before copying, use the **User Library root**
|
|
63
|
+
from Live's **Settings → Library**, not the `Remote Scripts` folder:
|
|
64
|
+
|
|
65
|
+
```sh
|
|
66
|
+
uvx --python 3.11 --from https://github.com/iamursky/tonable/releases/download/v0.5.2/tonable-0.5.2-py3-none-any.whl tonable install \
|
|
67
|
+
--user-library "/path/to/User Library" --dry-run
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Remove `--dry-run` to install. An explicit path can create a new library folder,
|
|
71
|
+
which is also useful for staging. Files are copied from the package into
|
|
72
|
+
`<User Library>/Remote Scripts/Tonable`. Existing Tonable files require
|
|
73
|
+
`--replace`; other Remote Scripts stay in place. Symlinked script destinations
|
|
74
|
+
are refused. Copying is staged before replacement. The installer does not change
|
|
75
|
+
Live preferences, select a Control Surface or contact Live unless you add
|
|
76
|
+
`--reload`. Close Live before replacing a component for a release check.
|
|
77
|
+
|
|
78
|
+
1. Restart Live after installing.
|
|
79
|
+
2. Open **Settings → Link, Tempo & MIDI → Control Surface** and choose **Tonable**.
|
|
80
|
+
Leave Input and Output set to **None**.
|
|
81
|
+
3. Run `tonable doctor` using the persistent install below, or run `doctor` through
|
|
82
|
+
the same `uvx --from ... tonable` command. For a custom library, pass
|
|
83
|
+
`--user-library "/path/to/User Library"`. All checks should show `OK`.
|
|
84
|
+
|
|
85
|
+
For a persistent CLI, independent of both the checkout and the wheel's location:
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
uv tool install --python 3.11 https://github.com/iamursky/tonable/releases/download/v0.5.2/tonable-0.5.2-py3-none-any.whl
|
|
89
|
+
uv tool dir --bin
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Use the `tonable` executable in that bin directory for setup and client commands.
|
|
93
|
+
You can replace the URL with an absolute path to a downloaded wheel. For `uvx`,
|
|
94
|
+
keep a local wheel at the configured path: its environment may need to be rebuilt.
|
|
95
|
+
See the [official uv tools guide](https://docs.astral.sh/uv/guides/tools/) for tool
|
|
96
|
+
isolation.
|
|
97
|
+
|
|
98
|
+
PyPI publication uses a separate Trusted Publishing job. Once version 0.5.2 is
|
|
99
|
+
listed on [the project's PyPI page](https://pypi.org/project/tonable/0.5.2/), you
|
|
100
|
+
can use a pinned registry source:
|
|
101
|
+
|
|
102
|
+
```sh
|
|
103
|
+
uvx --python 3.11 --from 'tonable==0.5.2' tonable install
|
|
104
|
+
uvx --python 3.11 --from 'tonable==0.5.2' tonable serve
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
The release workflow verifies the registry upload, file hashes and tool discovery.
|
|
108
|
+
If PyPI publication has not succeeded, use the GitHub wheel URL above.
|
|
109
|
+
|
|
110
|
+
### Install from source for development
|
|
111
|
+
|
|
112
|
+
```sh
|
|
113
|
+
uv sync --locked
|
|
114
|
+
uv run tonable install --dry-run
|
|
115
|
+
uv run tonable install
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Connect an assistant
|
|
119
|
+
|
|
120
|
+
Tonable exposes MCP over **stdio only**. Use the local setup for your client:
|
|
121
|
+
|
|
122
|
+
- [Codex CLI and IDE extension](https://github.com/iamursky/tonable/blob/v0.5.2/docs/clients.md#codex)
|
|
123
|
+
- [Claude Code](https://github.com/iamursky/tonable/blob/v0.5.2/docs/clients.md#claude-code)
|
|
124
|
+
- [Claude Desktop](https://github.com/iamursky/tonable/blob/v0.5.2/docs/clients.md#claude-desktop)
|
|
125
|
+
- [Other local MCP clients](https://github.com/iamursky/tonable/blob/v0.5.2/docs/clients.md#other-local-mcp-clients)
|
|
126
|
+
|
|
127
|
+
The examples follow official client documentation. They describe a compatible
|
|
128
|
+
transport; they do not certify every client version. Tonable has no HTTP/SSE
|
|
129
|
+
endpoint or hosted connector. The private loopback socket inside Live is not an
|
|
130
|
+
MCP URL. See [client setup](https://github.com/iamursky/tonable/blob/v0.5.2/docs/clients.md) for sources and verification steps.
|
|
131
|
+
|
|
132
|
+
Start with a read-only request:
|
|
133
|
+
|
|
134
|
+
> Use Tonable to check the Live connection and summarize the open Set. Do not edit it.
|
|
135
|
+
|
|
136
|
+
For an editing example, use a disposable empty Set:
|
|
137
|
+
|
|
138
|
+
> Create a MIDI track called Sketch. Add a four-bar Session clip with C3, E3 and G3
|
|
139
|
+
> on its first beat. Read the clip back and report any rejected notes. Do not start playback.
|
|
140
|
+
|
|
141
|
+
A MIDI clip needs an instrument before it produces sound. Ask the assistant to
|
|
142
|
+
read the current addresses before editing; track and device indices can change.
|
|
143
|
+
|
|
144
|
+
## Updates and removal
|
|
145
|
+
|
|
146
|
+
Obtain the new trusted wheel, close Live, and replace the persistent package:
|
|
147
|
+
|
|
148
|
+
```sh
|
|
149
|
+
uv tool install --force --python 3.11 /absolute/path/to/new-tonable.whl
|
|
150
|
+
tonable install --replace
|
|
151
|
+
tonable doctor
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Restart Live before running `doctor`, then reconnect the MCP server so the client
|
|
155
|
+
refreshes its tools. For an existing component from 0.3.0 onward,
|
|
156
|
+
`tonable install --replace --reload` can request a command-module reload. It does
|
|
157
|
+
not replace a restart for socket-layer changes or a failed reload. With a `uvx`
|
|
158
|
+
client configuration, update its wheel path as well.
|
|
159
|
+
|
|
160
|
+
To remove the component, run `tonable uninstall`, confirm the library and removal,
|
|
161
|
+
then set its Control Surface slot to **None** and remove the MCP client entry.
|
|
162
|
+
For unattended removal, use `tonable uninstall --user-library PATH --yes`.
|
|
163
|
+
`--dry-run` previews removal. To remove the persistent CLI, use
|
|
164
|
+
`uv tool uninstall tonable`. Runtime reports and `~/.tonable` are left in place.
|
|
165
|
+
|
|
166
|
+
## Data and editing behavior
|
|
167
|
+
|
|
168
|
+
The Remote Script binds only to `127.0.0.1` on an OS-assigned port. It generates a
|
|
169
|
+
random access key and writes `~/.tonable/session.json` with owner-only permissions.
|
|
170
|
+
Tonable itself has no hosted service and requires no API key. Your MCP client may
|
|
171
|
+
send tool results, including Set names and preset paths, to its model provider.
|
|
172
|
+
Never share the session file or commit local reports without reviewing them.
|
|
173
|
+
|
|
174
|
+
Edits use Live's shared undo history. `batch` groups changes into one step but is
|
|
175
|
+
not a transaction: successful actions remain applied if another action fails.
|
|
176
|
+
After a timeout or lost connection, read the state before retrying an edit.
|
|
177
|
+
Saving Sets, exporting audio and freezing tracks are outside Tonable's API.
|
|
178
|
+
|
|
179
|
+
## Development
|
|
180
|
+
|
|
181
|
+
```sh
|
|
182
|
+
uv sync --locked
|
|
183
|
+
uv run pytest
|
|
184
|
+
uv run ruff check .
|
|
185
|
+
uv run ruff format --check .
|
|
186
|
+
uv build
|
|
187
|
+
uv run python scripts/check_distribution.py \
|
|
188
|
+
--wheel dist/tonable-0.5.2-py3-none-any.whl \
|
|
189
|
+
--sdist dist/tonable-0.5.2.tar.gz --python 3.11
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Tests use a fake Live API and local loopback sockets. They do not prove audio
|
|
193
|
+
quality or replace [checks inside Live](https://github.com/iamursky/tonable/blob/v0.5.2/tests/manual_checklist.md). The optional
|
|
194
|
+
[Live API probe](https://github.com/iamursky/tonable/blob/v0.5.2/probe/README.md) is developer diagnostics; normal installation
|
|
195
|
+
does not need it and the installed wheel excludes it.
|
|
196
|
+
|
|
197
|
+
See [architecture](https://github.com/iamursky/tonable/blob/v0.5.2/docs/plan.md) and [publication checks](https://github.com/iamursky/tonable/blob/v0.5.2/docs/publishing.md).
|
|
198
|
+
|
|
199
|
+
## Acknowledgments and license
|
|
200
|
+
|
|
201
|
+
Tonable draws on techniques from
|
|
202
|
+
[ableton-live-mcp](https://github.com/wstierhout/ableton-live-mcp) and
|
|
203
|
+
[Producer Pal](https://github.com/adamjmurray/producer-pal). Attribution and their
|
|
204
|
+
MIT notices are in [THIRD_PARTY_NOTICES.md](https://github.com/iamursky/tonable/blob/v0.5.2/THIRD_PARTY_NOTICES.md).
|
|
205
|
+
|
|
206
|
+
Tonable is licensed under [MIT](https://github.com/iamursky/tonable/blob/v0.5.2/LICENSE), © 2026 Ilya Amursky. Ableton software and
|
|
207
|
+
content are not included and remain subject to their own licenses.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Third-party notices
|
|
2
|
+
|
|
3
|
+
Tonable is an independent project and is not affiliated with Ableton AG.
|
|
4
|
+
Ableton and Live are trademarks of Ableton AG.
|
|
5
|
+
|
|
6
|
+
The projects below informed Tonable's implementation. Their MIT license notices
|
|
7
|
+
are retained here. Source comments identify the relevant techniques, including
|
|
8
|
+
command timeout cancellation and automation event ordering. These notices do not
|
|
9
|
+
cover Ableton software, presets or packs; none are bundled with Tonable.
|
|
10
|
+
|
|
11
|
+
## Attribution policy
|
|
12
|
+
|
|
13
|
+
When incorporating third-party code, identify its source in the affected file
|
|
14
|
+
and retain its copyright and license notice here. Keep upstream branding out of
|
|
15
|
+
Tonable's product name and artwork.
|
|
16
|
+
|
|
17
|
+
## ableton-live-mcp
|
|
18
|
+
|
|
19
|
+
https://github.com/wstierhout/ableton-live-mcp
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
MIT License
|
|
23
|
+
|
|
24
|
+
Copyright (c) 2025 Siddharth Ahuja
|
|
25
|
+
Copyright (c) 2026 wstierhout
|
|
26
|
+
|
|
27
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
28
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
29
|
+
in the Software without restriction, including without limitation the rights
|
|
30
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
31
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
32
|
+
furnished to do so, subject to the following conditions:
|
|
33
|
+
|
|
34
|
+
The above copyright notice and this permission notice shall be included in all
|
|
35
|
+
copies or substantial portions of the Software.
|
|
36
|
+
|
|
37
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
38
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
39
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
40
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
41
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
42
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
43
|
+
SOFTWARE.
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Producer Pal
|
|
47
|
+
|
|
48
|
+
https://github.com/adamjmurray/producer-pal
|
|
49
|
+
|
|
50
|
+
Producer Pal is a trademark. Tonable uses its own product name and artwork.
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
MIT License
|
|
54
|
+
|
|
55
|
+
Copyright (c) 2025-2026 Adam Murray and Producer Pal contributors
|
|
56
|
+
|
|
57
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
58
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
59
|
+
in the Software without restriction, including without limitation the rights
|
|
60
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
61
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
62
|
+
furnished to do so, subject to the following conditions:
|
|
63
|
+
|
|
64
|
+
The above copyright notice and this permission notice shall be included in all
|
|
65
|
+
copies or substantial portions of the Software.
|
|
66
|
+
|
|
67
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
68
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
69
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
70
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
71
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
72
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
73
|
+
SOFTWARE.
|
|
74
|
+
|
|
75
|
+
```
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1615 404" width="1615" height="404">
|
|
2
|
+
<title>tonable</title>
|
|
3
|
+
<path fill="#DCDCDC" d="M1438.12 367.22C1436.06 367.11 1433.42 366.90 1432.25 366.75C1427.39 366.17 1424.34 365.75 1423.75 365.60C1423.41 365.50 1422.06 365.23 1420.75 364.98C1415.78 364.03 1414.50 363.76 1413.33 363.42C1412.67 363.22 1411.62 362.93 1411.00 362.77C1410.38 362.61 1409.14 362.27 1408.25 362.01C1407.36 361.75 1406.01 361.36 1405.25 361.15C1404.49 360.93 1403.65 360.65 1403.38 360.51C1403.10 360.38 1402.14 360.03 1401.25 359.74C1394.82 357.64 1384.38 352.68 1378.55 348.95C1378.18 348.71 1377.59 348.35 1377.25 348.16C1374.41 346.53 1368.00 342.00 1364.88 339.41C1360.85 336.06 1354.72 330.01 1351.93 326.62C1351.25 325.80 1350.31 324.68 1349.86 324.12C1347.24 321.00 1343.19 315.44 1341.88 313.20C1338.18 306.88 1336.53 303.82 1335.39 301.25C1334.93 300.21 1334.20 298.58 1333.75 297.62C1332.20 294.28 1332.00 293.82 1332.00 293.64C1332.00 293.53 1331.84 293.10 1331.64 292.66C1331.22 291.76 1330.93 290.95 1329.34 286.25C1328.20 282.90 1327.89 281.84 1327.00 278.25C1325.17 270.94 1324.49 267.09 1323.61 259.25C1323.09 254.60 1322.86 240.87 1323.22 236.12C1323.83 228.24 1324.63 222.75 1326.02 217.00C1326.30 215.83 1326.68 214.20 1326.87 213.38C1327.06 212.55 1327.41 211.26 1327.63 210.50C1327.86 209.74 1328.27 208.34 1328.56 207.38C1328.84 206.41 1329.41 204.67 1329.81 203.50C1330.21 202.33 1330.70 200.87 1330.90 200.25C1331.10 199.63 1331.43 198.77 1331.63 198.34C1331.83 197.90 1332.00 197.43 1332.00 197.28C1332.00 197.13 1332.24 196.48 1332.53 195.82C1332.82 195.16 1333.20 194.29 1333.38 193.88C1335.70 188.51 1337.48 185.09 1341.88 177.55C1342.33 176.77 1345.47 172.14 1346.49 170.75C1347.05 169.99 1347.79 168.95 1348.14 168.42C1348.49 167.89 1349.48 166.66 1350.33 165.67C1351.18 164.68 1352.43 163.20 1353.12 162.37C1355.59 159.39 1363.50 151.77 1366.46 149.51C1367.10 149.02 1367.74 148.50 1367.88 148.35C1368.01 148.20 1368.57 147.75 1369.12 147.35C1370.53 146.33 1370.47 146.37 1372.05 145.13C1372.83 144.51 1373.53 144.00 1373.62 144.00C1373.70 144.00 1374.36 143.58 1375.08 143.06C1376.55 142.01 1376.95 141.75 1378.35 140.94C1380.01 139.97 1380.19 139.86 1380.54 139.59C1380.96 139.26 1384.96 137.13 1388.66 135.27C1391.30 133.94 1392.33 133.46 1394.62 132.49C1395.17 132.26 1396.16 131.83 1396.82 131.53C1397.48 131.24 1398.13 131.00 1398.28 131.00C1398.43 131.00 1398.90 130.84 1399.34 130.64C1400.24 130.22 1401.44 129.79 1404.62 128.74C1410.56 126.79 1414.55 125.71 1420.25 124.53C1425.44 123.45 1426.62 123.27 1434.91 122.25C1439.55 121.68 1450.16 121.43 1457.03 121.73C1460.79 121.89 1464.66 122.13 1465.62 122.25C1471.97 123.05 1473.68 123.29 1474.12 123.42C1474.39 123.50 1475.85 123.77 1477.37 124.02C1481.14 124.64 1483.43 125.11 1486.38 125.88C1487.75 126.25 1489.46 126.69 1490.17 126.87C1490.89 127.05 1491.96 127.37 1492.55 127.57C1493.14 127.78 1494.64 128.26 1495.88 128.65C1497.11 129.04 1498.41 129.50 1498.75 129.68C1499.09 129.85 1499.54 130.00 1499.75 130.01C1499.96 130.01 1500.58 130.23 1501.12 130.50C1501.67 130.77 1502.25 130.99 1502.41 130.99C1502.56 131.00 1503.35 131.29 1504.16 131.64C1504.96 132.00 1505.85 132.39 1506.12 132.50C1510.04 134.18 1512.84 135.47 1515.00 136.57C1519.32 138.80 1519.91 139.13 1522.74 140.98C1523.50 141.47 1524.23 141.93 1524.38 142.00C1525.29 142.43 1530.15 145.89 1532.66 147.90C1536.74 151.18 1539.00 153.23 1543.38 157.62C1547.83 162.09 1550.86 165.57 1553.38 169.11C1553.65 169.50 1554.11 170.11 1554.40 170.47C1555.46 171.78 1560.32 178.97 1561.10 180.38C1561.33 180.79 1561.72 181.46 1561.97 181.88C1563.31 184.07 1565.35 187.80 1566.47 190.12C1569.40 196.18 1569.85 197.18 1570.86 200.00C1571.08 200.62 1571.37 201.35 1571.50 201.62C1571.63 201.90 1571.92 202.63 1572.13 203.25C1574.24 209.22 1574.86 211.05 1575.14 212.12C1575.32 212.81 1575.71 214.28 1576.01 215.38C1577.03 219.21 1578.06 224.13 1578.76 228.50C1578.90 229.39 1579.19 231.00 1579.40 232.06C1579.83 234.29 1580.41 240.70 1580.75 246.88C1581.05 252.59 1581.06 263.31 1580.76 264.11L1580.51 264.75L1493.44 264.81L1406.38 264.88L1404.88 265.42C1404.05 265.71 1403.08 266.02 1402.72 266.10C1401.90 266.28 1401.76 266.88 1402.04 269.15C1402.38 271.96 1403.78 277.58 1404.90 280.62C1405.26 281.59 1405.71 282.82 1405.92 283.38C1406.67 285.42 1408.95 289.71 1410.63 292.25C1413.22 296.18 1418.47 301.27 1422.88 304.12C1424.11 304.92 1429.61 307.67 1430.66 308.00C1431.19 308.17 1431.74 308.40 1431.88 308.49C1432.21 308.73 1435.15 309.63 1437.62 310.26C1440.84 311.08 1446.55 311.75 1450.29 311.75C1453.41 311.75 1462.00 310.94 1462.57 310.58C1462.70 310.50 1463.66 310.24 1464.71 310.00C1466.75 309.53 1467.50 309.28 1469.88 308.31C1471.78 307.53 1473.60 306.65 1474.88 305.88C1475.42 305.54 1476.04 305.19 1476.25 305.09C1478.87 303.82 1486.32 296.97 1488.45 293.88C1490.62 290.73 1491.60 289.04 1492.64 286.62C1492.99 285.80 1493.38 284.94 1493.50 284.72C1493.62 284.50 1493.84 283.85 1493.99 283.27C1494.20 282.52 1494.45 282.16 1494.91 281.99C1495.90 281.61 1576.39 281.79 1576.77 282.17C1576.99 282.39 1576.94 282.79 1576.53 283.86C1576.24 284.62 1575.76 285.90 1575.47 286.69C1575.17 287.48 1574.79 288.46 1574.61 288.88C1574.43 289.29 1573.95 290.41 1573.53 291.38C1573.12 292.34 1572.06 294.53 1571.17 296.25C1569.67 299.18 1569.32 299.83 1567.96 302.19C1567.66 302.70 1567.30 303.35 1567.14 303.62C1566.56 304.67 1562.84 310.32 1561.37 312.38C1560.88 313.06 1560.22 314.02 1559.90 314.50C1559.57 314.98 1558.99 315.79 1558.59 316.29C1558.20 316.79 1557.65 317.51 1557.38 317.89C1557.10 318.27 1556.76 318.70 1556.62 318.85C1556.49 319.00 1555.53 320.14 1554.50 321.37C1549.60 327.25 1544.11 332.62 1537.66 337.86C1533.66 341.10 1533.10 341.51 1529.12 344.19C1526.36 346.05 1526.54 345.94 1523.96 347.45C1522.95 348.03 1521.96 348.62 1521.75 348.74C1519.21 350.29 1513.08 353.48 1510.62 354.53C1509.66 354.94 1508.51 355.44 1508.06 355.64C1507.62 355.84 1506.88 356.16 1506.44 356.36C1504.51 357.21 1499.80 359.00 1499.48 359.00C1499.28 359.00 1498.84 359.15 1498.50 359.32C1498.16 359.50 1496.86 359.96 1495.62 360.34C1494.39 360.72 1492.81 361.21 1492.12 361.42C1489.53 362.24 1483.98 363.61 1479.62 364.50C1474.63 365.53 1471.16 366.07 1465.25 366.74C1459.34 367.41 1445.93 367.65 1438.12 367.22ZM804.50 366.48C803.19 366.36 800.69 366.15 798.93 366.01C795.19 365.71 790.24 364.85 785.62 363.70C785.08 363.57 784.01 363.31 783.25 363.13C781.82 362.80 780.60 362.43 777.00 361.23C769.54 358.76 762.67 355.24 756.01 350.49C753.95 349.03 748.74 344.77 747.16 343.26C745.79 341.96 742.45 338.23 741.44 336.88C741.34 336.74 741.00 336.29 740.68 335.88C740.16 335.20 737.50 331.24 736.88 330.22C735.65 328.19 734.05 325.12 733.10 322.97C732.46 321.54 731.79 320.04 731.61 319.62C730.74 317.71 727.99 309.02 728.00 308.20C728.00 307.96 727.78 306.84 727.52 305.70C726.47 301.20 725.92 293.97 726.26 289.00C726.87 280.08 727.76 275.93 730.92 267.38C731.44 265.96 733.88 260.99 735.22 258.62C736.54 256.29 738.53 253.35 740.46 250.88C743.01 247.61 749.14 241.82 752.75 239.28C754.55 238.01 757.06 236.36 757.88 235.90C758.29 235.67 758.96 235.27 759.38 235.01C760.09 234.55 760.77 234.18 764.50 232.22C765.96 231.45 770.40 229.44 772.38 228.65C773.35 228.26 779.88 226.17 782.12 225.53C785.57 224.54 790.74 223.40 794.00 222.90C795.31 222.69 797.11 222.41 798.00 222.27C808.81 220.59 813.38 220.41 847.25 220.37C863.27 220.35 876.51 220.31 876.68 220.29C878.20 220.09 879.00 211.70 878.13 205.00C877.93 203.42 877.60 201.68 877.39 201.12C877.19 200.57 877.02 199.90 877.01 199.62C877.00 199.35 876.84 198.83 876.65 198.46C876.46 198.10 876.17 197.40 876.01 196.91C875.85 196.42 875.45 195.53 875.12 194.94C874.79 194.36 874.33 193.54 874.10 193.12C872.84 190.88 869.94 187.71 867.62 186.03C865.80 184.72 865.61 184.61 863.10 183.39C857.97 180.89 853.62 180.04 845.88 180.03C838.16 180.02 833.22 181.00 826.74 183.83C825.27 184.47 821.47 186.72 820.01 187.82C818.30 189.11 816.26 191.16 814.96 192.93C813.02 195.56 811.87 198.13 810.49 202.92C810.20 203.91 809.82 204.84 809.63 205.00C809.18 205.37 732.79 205.31 732.31 204.93C731.78 204.52 731.86 204.08 733.56 198.12C734.78 193.85 736.29 189.80 738.15 185.80C738.62 184.80 739.00 183.94 739.00 183.88C739.00 183.78 741.93 178.34 742.91 176.62C743.23 176.07 743.67 175.29 743.90 174.88C744.25 174.24 746.30 171.13 747.93 168.75C752.90 161.50 760.35 153.52 767.39 147.92C769.58 146.18 771.51 144.64 771.67 144.51C772.08 144.17 776.21 141.43 777.25 140.81C782.05 137.93 791.46 133.00 792.13 133.00C792.24 133.00 792.78 132.79 793.35 132.53C797.02 130.85 802.52 128.89 807.38 127.53C813.02 125.95 812.28 126.13 819.21 124.61C821.38 124.13 826.07 123.41 832.09 122.62C840.94 121.46 861.58 121.39 868.00 122.49C868.76 122.62 870.66 122.84 872.23 122.99C873.79 123.13 875.93 123.41 876.98 123.61C878.02 123.81 879.61 124.10 880.50 124.25C885.00 125.01 889.81 126.04 893.38 126.99C894.48 127.29 895.98 127.69 896.73 127.88C897.48 128.07 898.38 128.33 898.73 128.46C899.08 128.60 900.39 129.01 901.62 129.37C903.95 130.07 906.07 130.81 907.38 131.38C907.79 131.57 909.42 132.28 911.00 132.97C915.71 135.03 920.46 137.55 923.49 139.62C927.31 142.22 929.69 144.19 932.92 147.42C935.10 149.61 936.12 150.76 938.43 153.60C940.88 156.63 944.88 163.51 947.01 168.38C947.53 169.55 947.74 170.07 949.02 173.31C950.90 178.11 951.93 182.07 953.35 190.00C953.56 191.17 953.85 193.98 954.00 196.25C954.15 198.52 954.33 200.53 954.39 200.73C954.65 201.48 954.50 358.79 954.24 359.27C953.99 359.74 953.23 359.75 917.00 359.75C880.69 359.75 880.01 359.74 879.76 359.27C879.59 358.95 879.50 354.96 879.50 348.02L879.50 337.25L878.94 337.28C878.57 337.29 877.76 337.98 876.63 339.21C869.08 347.49 860.65 353.74 850.58 358.53C848.88 359.34 847.41 360.00 847.31 360.01C847.21 360.01 846.67 360.23 846.12 360.50C845.58 360.77 844.98 360.99 844.80 360.99C844.62 361.00 843.94 361.21 843.30 361.46C840.44 362.59 835.18 363.99 828.50 365.39C823.60 366.41 810.59 367.00 804.50 366.48ZM1105.62 366.15C1098.18 365.56 1091.26 364.02 1083.00 361.13C1081.01 360.43 1073.00 356.54 1071.60 355.59C1071.12 355.27 1070.67 355.00 1070.60 355.00C1070.54 355.00 1070.17 354.79 1069.80 354.53C1069.43 354.28 1068.13 353.42 1066.92 352.63C1062.40 349.69 1055.50 343.47 1051.85 339.04C1050.30 337.16 1049.55 336.55 1049.39 337.05C1049.33 337.23 1049.22 342.32 1049.15 348.37C1049.03 357.56 1048.95 359.42 1048.65 359.64C1048.16 359.99 974.36 359.96 974.00 359.60C973.62 359.22 973.66 34.79 974.03 34.34C974.26 34.06 980.58 34.00 1011.52 34.00C1034.28 34.00 1048.78 34.09 1048.86 34.23C1048.94 34.36 1049.04 61.47 1049.09 94.48C1049.13 127.49 1049.25 154.59 1049.35 154.69C1049.56 154.90 1050.61 153.75 1052.23 151.53C1052.83 150.70 1053.62 149.70 1053.98 149.30C1054.33 148.91 1055.24 147.86 1056.00 146.99C1059.45 142.98 1063.70 139.29 1068.88 135.81C1070.09 134.99 1070.17 134.94 1072.93 133.37C1079.29 129.74 1087.00 126.78 1094.12 125.24C1094.81 125.09 1096.04 124.80 1096.85 124.60C1097.66 124.39 1099.63 124.07 1101.23 123.87C1102.82 123.67 1104.86 123.40 1105.75 123.27C1110.56 122.53 1124.35 122.74 1130.20 123.63C1134.36 124.27 1138.56 125.05 1140.25 125.50C1143.43 126.35 1144.14 126.54 1145.60 126.90C1146.42 127.11 1147.39 127.44 1147.78 127.64C1148.16 127.84 1148.66 128.00 1148.89 128.00C1149.11 128.00 1149.65 128.17 1150.09 128.37C1150.52 128.57 1151.38 128.90 1152.00 129.10C1153.75 129.66 1155.28 130.24 1156.38 130.74C1156.92 130.99 1158.05 131.50 1158.88 131.87C1162.31 133.42 1165.38 135.04 1170.20 137.88C1171.08 138.39 1175.15 141.12 1175.78 141.61C1176.14 141.89 1176.69 142.29 1177.00 142.50C1178.18 143.28 1181.73 146.19 1184.55 148.70C1187.91 151.67 1192.87 156.92 1195.83 160.62C1198.86 164.41 1200.15 166.19 1202.67 170.00C1203.44 171.17 1204.27 172.42 1204.51 172.77C1205.03 173.52 1210.00 182.23 1210.00 182.38C1210.00 182.44 1210.63 183.81 1211.39 185.43C1213.49 189.87 1213.98 190.97 1215.50 194.75C1215.75 195.37 1216.19 196.46 1216.48 197.17C1216.76 197.88 1217.00 198.60 1217.00 198.76C1217.00 198.92 1217.16 199.40 1217.36 199.84C1218.24 201.76 1220.53 209.44 1221.47 213.62C1222.49 218.16 1222.74 219.42 1223.12 221.85C1223.34 223.20 1223.56 224.40 1223.62 224.50C1223.80 224.78 1224.51 231.99 1224.75 235.88C1225.03 240.33 1225.03 248.53 1224.75 252.25C1224.41 256.90 1223.77 262.49 1223.37 264.43C1223.17 265.42 1223.00 266.52 1223.00 266.88C1223.00 267.77 1221.49 274.50 1220.45 278.25C1219.18 282.84 1217.14 289.12 1215.99 292.00C1215.69 292.76 1215.29 293.79 1215.10 294.31C1214.41 296.16 1210.09 305.08 1208.56 307.78C1205.56 313.11 1205.42 313.33 1202.28 318.12C1201.38 319.50 1200.08 321.36 1199.38 322.27C1198.69 323.17 1197.84 324.29 1197.50 324.75C1197.16 325.20 1196.76 325.70 1196.62 325.85C1196.49 326.00 1195.82 326.80 1195.13 327.63C1191.63 331.84 1186.70 337.02 1182.91 340.46C1181.01 342.19 1176.67 345.67 1175.25 346.62C1174.63 347.04 1174.07 347.43 1174.00 347.51C1173.93 347.58 1173.26 348.03 1172.50 348.50C1171.74 348.98 1171.01 349.45 1170.88 349.56C1170.74 349.67 1169.88 350.23 1168.98 350.82C1168.07 351.40 1167.11 352.01 1166.85 352.18C1166.59 352.35 1165.98 352.70 1165.50 352.96C1165.02 353.21 1163.78 353.89 1162.75 354.46C1160.83 355.53 1158.00 356.92 1156.00 357.80C1155.38 358.07 1154.68 358.39 1154.44 358.52C1154.20 358.65 1153.58 358.91 1153.07 359.10C1152.55 359.29 1151.51 359.69 1150.75 359.99C1148.21 360.98 1142.99 362.67 1141.00 363.13C1140.24 363.31 1139.17 363.57 1138.62 363.70C1134.71 364.68 1129.21 365.66 1125.62 366.02C1121.52 366.43 1110.06 366.50 1105.62 366.15ZM123.38 359.73C118.23 359.42 113.71 358.69 109.38 357.47C106.41 356.63 103.41 355.66 102.75 355.32C102.41 355.15 101.97 355.00 101.79 355.00C101.60 355.00 101.15 354.84 100.79 354.64C100.42 354.45 99.45 353.99 98.62 353.63C96.62 352.75 94.71 351.75 94.23 351.34C94.01 351.15 93.77 351.00 93.69 351.00C93.52 351.00 90.43 349.10 89.43 348.38C83.35 344.01 79.95 340.83 75.54 335.42C72.90 332.17 69.14 326.36 67.77 323.38C65.64 318.76 65.35 318.04 64.26 314.79C61.98 307.96 61.27 304.02 60.52 294.00C60.39 292.13 60.35 271.69 60.43 243.11C60.53 206.98 60.49 195.21 60.27 194.79L59.98 194.25L46.79 194.25C36.86 194.25 33.53 194.18 33.30 193.95C33.07 193.72 33.00 186.17 33.00 161.50C33.00 136.83 33.07 129.28 33.30 129.05C33.53 128.82 36.86 128.75 46.79 128.75C59.80 128.75 59.99 128.74 60.25 128.24C60.44 127.89 60.56 118.48 60.63 97.00C60.69 75.54 60.81 66.11 61.00 65.76C61.27 65.25 61.34 65.25 98.88 65.25C135.80 65.25 136.49 65.26 136.74 65.73C136.92 66.06 137.00 76.32 137.00 97.18C137.00 120.94 137.07 128.22 137.30 128.45C137.53 128.68 144.80 128.75 168.50 128.75C192.20 128.75 199.47 128.82 199.70 129.05C199.93 129.28 200.00 136.80 200.00 161.39C200.00 190.89 199.97 193.47 199.59 193.78C199.24 194.07 194.03 194.14 168.28 194.19C147.41 194.24 137.31 194.34 137.13 194.52C136.77 194.88 136.64 267.00 136.99 273.25C137.13 275.79 137.41 278.61 137.61 279.50C137.80 280.39 138.07 281.63 138.21 282.25C138.61 284.04 139.28 286.35 139.49 286.62C139.59 286.76 139.80 287.24 139.95 287.69C140.64 289.73 143.41 292.92 145.60 294.17C148.08 295.59 151.00 296.63 154.62 297.40C156.70 297.83 158.48 297.88 177.00 298.00L197.12 298.12L197.26 314.00C197.43 332.51 197.26 359.08 196.97 359.54C196.82 359.80 189.72 359.86 161.33 359.87C141.83 359.87 124.75 359.81 123.38 359.73ZM501.69 359.81L486.26 359.75L486.12 359.19C486.05 358.88 486.02 307.21 486.06 244.38L486.12 130.12L524.00 130.12L561.88 130.12L562.00 143.79C562.07 151.31 562.21 157.54 562.31 157.64C562.56 157.89 563.46 157.05 563.94 156.13C565.04 153.99 569.96 148.01 573.39 144.63C574.98 143.07 577.30 140.97 578.50 140.00C579.26 139.39 580.04 138.75 580.25 138.57C581.10 137.84 582.21 137.05 583.62 136.14C584.45 135.62 585.52 134.93 586.00 134.62C589.50 132.37 596.13 129.18 600.25 127.77C603.17 126.76 604.87 126.23 606.16 125.90C606.97 125.70 608.08 125.42 608.62 125.29C611.30 124.61 613.37 124.22 616.00 123.88C617.58 123.68 619.66 123.38 620.62 123.23C622.98 122.84 636.02 122.83 638.75 123.21C639.92 123.37 642.02 123.66 643.42 123.86C648.56 124.57 658.54 127.18 661.66 128.63C662.10 128.83 662.61 129.00 662.79 129.00C662.98 129.00 663.36 129.15 663.63 129.34C663.90 129.53 664.41 129.77 664.75 129.87C665.92 130.23 672.11 133.34 674.88 134.95C676.39 135.84 677.85 136.69 678.12 136.85C679.33 137.54 682.80 139.96 683.12 140.34C683.26 140.49 684.33 141.43 685.50 142.41C691.68 147.59 696.96 153.97 702.35 162.75C703.74 165.00 705.50 168.50 707.03 172.00C707.72 173.58 708.38 175.10 708.50 175.38C709.01 176.52 710.00 179.26 710.63 181.25C711.01 182.42 711.40 183.60 711.52 183.88C712.29 185.73 714.07 193.82 715.18 200.50L715.86 204.62L715.93 281.98C715.97 324.53 715.91 359.44 715.80 359.55C715.53 359.82 637.49 359.84 637.22 359.57C637.10 359.45 636.98 329.10 636.94 292.12C636.88 227.99 636.85 224.75 636.41 222.25C635.07 214.63 634.32 212.15 631.90 207.29C630.34 204.17 629.18 202.63 626.00 199.48C622.73 196.24 619.91 194.34 615.62 192.48C613.50 191.56 609.97 190.63 607.00 190.22C604.26 189.83 596.08 190.09 593.75 190.63C591.72 191.10 587.86 192.22 587.25 192.52C587.04 192.62 585.75 193.25 584.38 193.91C578.56 196.71 573.40 201.27 569.72 206.88C568.75 208.34 567.00 211.43 567.00 211.67C567.00 211.78 566.82 212.21 566.60 212.62C566.39 213.04 566.04 213.82 565.83 214.38C563.57 220.37 562.71 224.51 562.25 231.62C562.13 233.55 562.02 263.11 562.01 297.32C562.00 349.40 561.94 359.54 561.66 359.65C561.26 359.80 523.71 359.90 501.69 359.81ZM1247.62 359.75L1236.12 359.62L1236.06 196.53C1236.02 94.67 1236.09 33.32 1236.24 33.14C1236.58 32.72 1313.14 32.59 1313.64 33.01C1313.95 33.27 1314.00 55.08 1314.00 196.39C1314.00 292.39 1313.91 359.53 1313.78 359.61C1313.47 359.80 1262.00 359.91 1247.62 359.75ZM843.62 311.41C844.59 311.18 845.83 310.87 846.38 310.74C848.77 310.16 850.29 309.70 850.94 309.36C851.31 309.16 851.76 309.00 851.93 309.00C852.37 309.00 856.16 307.27 857.88 306.29C863.46 303.10 868.48 297.55 871.82 290.88C873.22 288.08 874.00 286.38 874.00 286.14C874.00 286.03 874.17 285.60 874.37 285.16C876.03 281.67 878.73 266.73 877.97 265.22C877.80 264.88 876.81 264.80 870.45 264.67C861.69 264.48 832.46 264.63 828.75 264.87C827.31 264.97 825.21 265.26 824.09 265.52C822.97 265.79 821.89 266.00 821.69 266.00C821.23 266.00 817.20 267.25 816.88 267.50C816.74 267.60 816.34 267.77 816.00 267.88C814.59 268.30 811.39 270.40 809.62 272.06C807.45 274.08 806.03 275.95 805.13 278.00C804.91 278.48 804.63 279.06 804.51 279.29C804.38 279.52 804.02 280.75 803.70 282.04C802.87 285.43 802.87 291.15 803.72 294.38C804.04 295.61 804.39 296.74 804.50 296.88C804.60 297.01 804.77 297.41 804.87 297.75C805.19 298.81 807.64 302.81 808.73 304.05C811.09 306.72 814.69 308.98 818.75 310.33C820.45 310.90 821.55 311.15 825.00 311.76C825.62 311.86 829.67 311.93 834.00 311.90C840.42 311.85 842.20 311.76 843.62 311.41ZM1100.88 302.76C1101.42 302.63 1102.55 302.36 1103.38 302.16C1107.10 301.28 1111.65 299.50 1114.76 297.71C1121.92 293.59 1128.21 287.12 1133.19 278.75C1133.88 277.58 1136.30 272.75 1137.12 270.88C1138.06 268.73 1140.01 262.73 1140.00 261.99C1140.00 261.78 1140.17 260.94 1140.38 260.13C1140.80 258.52 1141.37 254.77 1141.78 250.88C1142.16 247.36 1141.92 235.65 1141.42 233.38C1141.22 232.41 1140.93 230.95 1140.79 230.12C1140.32 227.39 1139.75 224.89 1139.37 223.93C1139.17 223.41 1139.00 222.74 1138.99 222.43C1138.99 222.13 1138.77 221.43 1138.50 220.88C1138.23 220.32 1138.01 219.73 1138.01 219.55C1137.99 218.73 1135.37 212.88 1133.80 210.12C1129.90 203.31 1124.26 197.21 1118.63 193.74C1116.98 192.72 1116.72 192.58 1114.12 191.30C1109.47 189.00 1106.67 188.11 1101.38 187.24C1099.60 186.95 1091.64 186.96 1090.00 187.25C1083.31 188.46 1080.58 189.26 1076.30 191.29C1069.81 194.36 1063.81 199.67 1058.93 206.67C1058.06 207.92 1055.00 213.16 1055.00 213.41C1055.00 213.48 1054.71 214.17 1054.35 214.95C1053.43 216.99 1053.34 217.20 1052.66 219.00C1051.57 221.88 1050.00 227.11 1050.00 227.86C1050.00 228.15 1049.83 229.01 1049.63 229.76C1048.91 232.44 1048.43 240.39 1048.58 247.25C1048.76 255.48 1049.31 260.11 1050.65 264.62C1050.86 265.31 1051.26 266.66 1051.54 267.62C1052.25 270.03 1053.20 272.86 1053.67 273.96C1055.00 277.06 1058.26 283.19 1059.60 285.12C1062.53 289.32 1067.80 294.74 1071.05 296.91C1073.66 298.64 1078.08 300.78 1079.75 301.13C1080.23 301.23 1080.74 301.39 1080.88 301.49C1081.26 301.78 1085.89 302.79 1087.87 303.01C1090.09 303.27 1099.55 303.09 1100.88 302.76ZM1495.72 220.15C1496.37 219.74 1495.53 214.59 1494.12 210.38C1491.39 202.20 1488.14 196.72 1482.85 191.36C1478.96 187.41 1475.32 184.94 1470.38 182.87C1468.72 182.18 1465.19 181.08 1463.99 180.88C1463.38 180.78 1462.69 180.60 1462.47 180.48C1461.68 180.07 1451.72 179.21 1449.62 179.38C1444.74 179.76 1439.89 180.29 1439.52 180.48C1439.30 180.60 1438.62 180.78 1438.01 180.88C1436.58 181.11 1431.20 182.87 1430.06 183.48C1429.82 183.61 1428.64 184.18 1427.43 184.76C1425.66 185.61 1422.54 187.49 1421.12 188.55C1417.88 191.01 1415.02 193.64 1413.00 196.01C1412.24 196.90 1411.57 197.68 1411.50 197.75C1411.01 198.23 1409.18 200.92 1408.35 202.38C1407.32 204.19 1405.00 208.91 1405.00 209.20C1405.00 209.30 1404.85 209.66 1404.68 210.00C1403.77 211.76 1401.88 219.14 1402.15 219.85C1402.26 220.13 1402.76 220.25 1404.09 220.30C1408.69 220.49 1495.41 220.35 1495.72 220.15ZM328.12 152.70C328.05 152.52 328.02 149.61 328.06 146.25C328.12 141.00 328.18 140.12 328.50 140.12C328.82 140.12 328.88 141.00 328.88 146.48C328.88 151.34 328.80 152.86 328.56 152.94C328.39 152.99 328.19 152.89 328.12 152.70ZM328.12 117.70C328.05 117.51 328.02 115.28 328.06 112.74C328.11 108.84 328.18 108.12 328.50 108.12C328.82 108.12 328.88 108.83 328.88 112.98C328.88 116.64 328.80 117.86 328.56 117.94C328.39 117.99 328.19 117.89 328.12 117.70Z"/>
|
|
4
|
+
<path fill="#00BBE7" d="M351.00 105.43A132.67 132.67 0 1 1 329.00 105.53L329.00 168.44A71.11 71.11 0 1 0 351.00 168.37Z"/>
|
|
5
|
+
</svg>
|